Формат хранения инфы о сайтах на сервере в db под управлением апача.

Discussion in 'PHP' started by M@rtein, 24 Aug 2009.

  1. M@rtein

    M@rtein New Member

    Joined:
    9 Aug 2007
    Messages:
    58
    Likes Received:
    4
    Reputations:
    0
    Здравствуйте, есть вопрос на который ни где не могу найти ответ. Получил доступ к хостеру. Пути к сайтам на сервере храняться в файле /etc/httpd/conf/vhost.db. Если открыть блокнотом, то там структура такова:
    Сначала идут какие то бракозябры
    А потом длинная строчка вида
    Потом опять иероглифы и снова строчка описанного вида. После таких чередований файл заканчиваеться опять же строчкой из путей к сайтам.
    Вопрос в том чем такую бд можно корректно открыть, пробовал различные программы - выдавали ошибку об отсутсвии индекса, повреждение чего то там... Начал копаться выяснил инофрмацию о формате db
    В файле /etc/httpd/conf.d/vhost.conf такое содержимое:
    Сам файл большого размера. Проблему решаю уже около 2 месяцев. Решил искать помощи на форуме.

    Одно из решений это написать парсер, что я усердно делал на php. Получилось криво, но все же получилось так как ни о какой оптимизации в моем ньбовских начинания и речи быть не может. Так что если есть кодер который сможеть написать скрипт, который еще и пр прочекает и в mysql все дело красиво запишет, ОТПИШИСЬ скину ТЗ.

    Второе уже дело принципа, как то же должен открываться такой файл, простыми средствами (пока писал пост обратил внимание на запись MANAGED BY PUPPET - возможно с этим что то связано.)

    P.S. В любом случае заплачу wmz за решение проблемы или за любые конструктивные предложения. ICQ 357-815-один3шесть. Также заранее спасибо тому кто кодера подскажет!

    P.P.S. Есть такие вот вспомагательные материалы:
    http://httpd.apache.org/docs/2.0/programs/dbmmanage.html
    И якобы это тоже поможет
     
  2. chekist

    chekist Elder - Старейшина

    Joined:
    14 Nov 2007
    Messages:
    215
    Likes Received:
    160
    Reputations:
    100
    может я ошибаюсь, но вроде похоже на sqlite
     
  3. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    Для справки. А скрипт тебе вроде на винграде уж помогали писать.
     
  4. M@rtein

    M@rtein New Member

    Joined:
    9 Aug 2007
    Messages:
    58
    Likes Received:
    4
    Reputations:
    0
    На винграде не решили проблему
     
  5. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    скинь в ПМ ссыль на файл.

    кажется мне что стоит там lighttpd с mod_mysql_vhost, запросил ТС список модулей , ждемс результата
     
    #5 POS_troi, 25 Aug 2009
    Last edited: 25 Aug 2009
  6. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Ссылку на файл в ПМ...
    Кажется, я смогу тебе помочь
     
    #6 login999, 26 Aug 2009
    Last edited: 26 Aug 2009
  7. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    не дает =)

    если бы дал то ужу давно ему его расковыряли а так сидим и занимаемся телепатией =)
     
  8. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Блин, подтерли мой пост :(
    В двух словах : если ТС не хочет давать файл то пускай катится ко всем чертям.
    Попытка телепатии на Python2.6 из стандартных манов
    Code:
    import whichdb
    import anydbm
    
    print "DATABASE TYPE: {0}".format( whichdb.whichdb("database.db"))
    print "DATABASE ITEMS:"
    db = anydbm.open("database.db", 'r')
    for k, v in db.iteritems():
        print "    ",k, '\t', v
    
    P.S. Естественно что скрипт запускать из той директории где лежит сама база
     
    #8 login999, 26 Aug 2009
    Last edited: 26 Aug 2009
  9. M@rtein

    M@rtein New Member

    Joined:
    9 Aug 2007
    Messages:
    58
    Likes Received:
    4
    Reputations:
    0
    Ребят ну что вы в самом деле!, крупный дырявый хостер, сломав один бажный сайт получить можно доступ к сотни. Не могу поделиться файлом. Тем более я же не просто так прошу!!! Спрашивайте необходимую инфу, отвечу. Парсер уже написан, какой то особой ценности не представляеться, так как все аккуратно перенес в MySQL. НО!!! Интересует, потому что несколько месяцев пытался разобраться с форматом хранения данных и хочеться увидеть чисто принципиально, для себя, так как его задумывали хостеры. И как правильно было бы получить информацию из него, а может и иероглифы что то значат...
     
  10. M@rtein

    M@rtein New Member

    Joined:
    9 Aug 2007
    Messages:
    58
    Likes Received:
    4
    Reputations:
    0
    login999 о чудо, подскажи пожалуста как правильно запустить, и наверное придеться закрыть тему и отблагодарить тебя. Ачат рулит!!! login999 респект!!!
    Если запускать как я думаю, через cmd, то получаеться ничего
    но если просто тупо запустить код bd.py на выполнение то видно как там пролетает необходимая инфа.

    И у меня 4 вопроса:
    1)подкоректируй мои действия по запуску скрипта
    2)если скрипт запускать просто двойным кликом, то подскажи строчки кода необходимые для записи этих данных в бд, например тот же mysql в 2 столбца
    3)расскажи все что знаешь про этот формат данных, как примерно устроен принцип работы этих виртуальных хостов, как сразу пришел к решению (просто реально несколько месяцев не мог решить проблему, перечитал кучу инфы, и хоть бы где упоминался питон!!!)
    4)твой номер wmz =)

    P.S. Огромное спасибо также человеку под ником POS_troi
     
  11. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Оки, щас попробую подкорректировать так чтоб он дампил в текстовый файлик
    Code:
    #!usr/bin/env python
    #-*- encoding: UTF-8 -*-
    
    import whichdb
    import anydbm
    
    DATABASE_NAME = raw_input("ENTER DATABASE FILENAME :")
    print "DATABASE TYPE: {0}".format( whichdb.whichdb(DATABASE_NAME))
    print "DATABASE ITEMS:"
    db = anydbm.open(DATABASE_NAME, 'c')
    with open("{0}_dump.txt".format(DATABASE_NAME), "w") as out:
        for k, v in db.iteritems():
            v_ = v.split("/")
            if k == v_[-1]:
                print "    ",k, '\t', v
                out.write("{0};{1}\n".format(k, v))
            else:
                print "DOUBLE",k, '\t', v
    raw_input()
    
    Откорректированный вариант, при запуске спросит имя файла, вводить с расширением (!).
    Сдампит базу в текстовый файл, также выведет ее элементы в консоль и тип (если определит)
    Ошибка вылазила из-за того, что я неправильно указал права на чтение БД (хотя какого хера, по идее там все правильно указано, ну да пох кароч)
    Запускать можно двойным щелчком, консоль никуда не денется.
    Формат данных сам по себе древний (если исходить из данных qBIN), фактически представляет собой ассоциативный массив в файле (список пар ключ:значение), как написано из данных qBIN то это старый движок для простых баз данных, сам по себе файл не текстовый(хотя там и проскакивают текстовые данные), из-за чего и кракозябры при просмотре блокнотом. Как работают виртуальные хостинги - хз, я никогда с ними не разбирался.
    Как сразу пришел к решению - все очень просто - ты сам его нашел
    Исходя из этих данных можно с вероятностью в 90-95 процентов заявить что это таки действительно dbm. В стандартной библиотеке Python есть модуль для работы с файлами формата dbm и подобных ему (по крайней мере так написано). То что я написал - это на 90 % пример из стандартного мануала.
    Мораль (для кодеров): нужно сцук знать стандартную поставку и расширения, доступные для вашего языка...
     
    #11 login999, 27 Aug 2009
    Last edited: 27 Aug 2009
    1 person likes this.
  12. M@rtein

    M@rtein New Member

    Joined:
    9 Aug 2007
    Messages:
    58
    Likes Received:
    4
    Reputations:
    0
    Отлично работает скрипт, заменил двоеточие на точку с запятой и сохранил как csv файл, оттуда в mysql импортирую. Только не понял скрипт закончил выполнение корректно или нет, так как текстовик с готовыми данными занимает в 2 раза меньше места!
    Либо это бд была каким то образом так организована, чтобы обеспечить быстрый доступ к данным, либо за что переживаю что некорректно проработал скрипт. Что хотя наврядли....

    !!! Кстати тип опрделил как dbhash.
     
  13. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Вчерась экспериментировал с этой базой данных, могу сказать что
    то что в базе занимало около 40 Кб в текстовом файлике занимало 7-8 Кб, размер у них больше чем у текстовых данных, намного больше.SQLite там была бы рациональнее.
    По сабжу БД представляет собой BSD db ака Berkley DB
     
  14. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    вы че тупые то что написано переписывать.
    ты еще оракл проверь сколько в нем будет занимать твой кб текста
     
  15. login999

    login999 Elder - Старейшина

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Это делать мне нехер перед тобой оправдываться ? Особенно если учесть то, что dbm драйвер не один, и какой именно там необходимо использовать я не знаю =/ Или по-твоему определение типа БД было просто так сделано ? А то что я написал означает то что это-стандартная dbm база, а не ***ти пойми какая реализация.

    Если бы ты что-то умел то ты это что-то сделал бы, гуглом и википедией тут все умеют пользоваться, так что понты свои сверни в трубочку и засунь себе подальше. Тупых тут нету.
     
    #15 login999, 27 Aug 2009
    Last edited: 27 Aug 2009
  16. POS_troi

    POS_troi Elder - Старейшина

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    login999 опередил , вот какраз зашол запостить перловку, твоя реализация правдо покрасивше =))
     
  17. M@rtein

    M@rtein New Member

    Joined:
    9 Aug 2007
    Messages:
    58
    Likes Received:
    4
    Reputations:
    0
    Пости, чтобы добить эту тему окончательно в пух и прах.
    Ты писал на основе примера txt2dbm?