Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Формат хранения инфы о сайтах на сервере в db под управлением апача. (https://forum.antichat.xyz/showthread.php?t=137088)

M@rtein 24.08.2009 17:38

Формат хранения инфы о сайтах на сервере в db под управлением апача.
 
Здравствуйте, есть вопрос на который ни где не могу найти ответ. Получил доступ к хостеру. Пути к сайтам на сервере храняться в файле /etc/httpd/conf/vhost.db. Если открыть блокнотом, то там структура такова:
Сначала идут какие то бракозябры
Цитата:

б?¦?”?b?<??ь>А>µ>Љ>[>2>>к=Ч=«=w=B==х<в<¶<‰<[<J<$<<а;·;‰;c;8;ь:ї:Њ:_:.:ш9е9І9‡9W9( 9я8н8В8’8]838 8Ы7*7s7877к6ѕ6Ќ6_6066г5ё5“5Ѓ5V55Э4Н4 ќ4^4%44г3Є3w3^3)33б2*22k2722Я1Н1*1k151 1е0У0ґ0ѓ0M0$0ц/З/“/f/4/!/ь.Я.є.?.\.0..Щ-®-…-^-<-ю,И,‘,_,(,ъ+З+”+`+.+ы*К*”*i*=**а)¬) Ќ)])())г(Т(Ў(Џ(a(T('(ы'Х'—'Z''Э&І&‹&[&,&&д%І%Ѓ%M%%и$ѕ$’$c$0$ю#Х#°#y#C##л" ѕ"Ћ"`"3"ю!С!ќ!f!3!!Щ І  T # пГ˜nAВ„G3 тЕ®{kBЫЁv7щЗ’b/ьКџqCйДЌWK&чИ№ЊX$ бРЈ“j8 Ю°›j…Q(ЯЎk4Лќj7р Ѕ‹X'сЖљn=&уї*‹Z,щгґ ЁѓS ЩИ—…W=ЦЙњrN1ыЦі‡ a4 ЪЇ‚]вҐe:г ґ „ U / Ы Є v C  з » Њ Z % у ѕ  и У ў ’ b Е • d . $ ъ й ё ‰ \ 3  ЮІҐxf?+ызєЃG бОў“hR пЅ°ЉyL8ыТ®…m7+ФЎo
А потом длинная строчка вида
Цитата:

.../mnt/target03/352302/www.site.net/web/content/site.net.php5-7.webtest.com/mnt/Target01/336159/338721/www.site2.uswww.site2.us.php5-5.webtest.com...
Потом опять иероглифы и снова строчка описанного вида. После таких чередований файл заканчиваеться опять же строчкой из путей к сайтам.
Вопрос в том чем такую бд можно корректно открыть, пробовал различные программы - выдавали ошибку об отсутсвии индекса, повреждение чего то там... Начал копаться выяснил инофрмацию о формате db
Цитата:

# Хэш файл
MapType: dbm[=type], MapSource: Путь к существующему файлу в файловой системе Unix
Здесь, источник это двоичный файл DBM формата содержащий то же самое содержимое что и простой текстовый файл, однако в специальном виде, оптимизированном
для действительно быстрого поиска. Этот тип может быть sdbm, gdbm, ndbm, или db в зависимости от настроек при компиляции. Если тип опущен, выбирается тип
установленный по умолчанию при компиляции. Вы можете создавать такой файл любой утилитой DBM или следующим Perl скриптом. Убедитесь что он настроен для создания
требуемого типа DBM файла. Этот пример создает файл NDBM.
#!/path/to/bin/perl
##
## txt2dbm -- convert txt map to dbm format
##
use NDBM_File;
use Fcntl;
($txtmap, $dbmmap) = @ARGV;
open(TXT, "<$txtmap") or die "Couldn't open $txtmap!\n";
tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644)
or die "Couldn't create $dbmmap!\n";
while (<TXT>) {
next if (/^\s*#/ or /^\s*$/);
$DB{$1} = $2 if (/^\s*(\S+)\s+(\S+)/);
}
untie %DB;
close(TXT);
$ txt2dbm map.txt map.db
В файле /etc/httpd/conf.d/vhost.conf такое содержимое:
Цитата:

# THIS FILE IS MANAGED BY PUPPET -- DO NOT CHANGE
# FOR CHANGES, PLEASE CONTACT SYSTEMS
#

<Directory /mnt/Target01>
Options +Includes SymLinksIfOwnerMatch
AllowOverride All
XBitHack On
</Directory>
<Directory /mnt/target02>
Options +Includes SymLinksIfOwnerMatch
AllowOverride All
XBitHack On
</Directory>
<Directory /mnt/target03>
Options +Includes SymLinksIfOwnerMatch
AllowOverride All
XBitHack On
</Directory>
<Directory /mnt/target04>
Options +Includes SymLinksIfOwnerMatch
AllowOverride All
XBitHack On
</Directory>


UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
LogFormat "%V %{X-Cluster-Client-ip}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" ZXTM
CustomLog /var/log/httpd/mass_access_log ZXTM

RewriteEngine on

RewriteMap lowercase int:tolower

# define the map file
RewriteMap vhost dbm=DB:conf/vhost

# deal with aliases as above
RewriteCond %{REQUEST_URI} !^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
# this does the file-based remap
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/web/content/$1

RewriteCond %{REQUEST_URI} ^/cgi-bin/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/web/cgi-bin/$1
Сам файл большого размера. Проблему решаю уже около 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
И якобы это тоже поможет
Цитата:

C:\Documents and Settings\M@rtein>cd C:\Program Files\Motiw\software\Apach
e2\bin

C:\Program Files\Motiw\software\Apache2\bin>htdbm.exe
htdbm -- program for manipulating DBM password databases.

chekist 25.08.2009 01:39

может я ошибаюсь, но вроде похоже на sqlite

qBiN 25.08.2009 03:18

Цитата:

dbm was the first of a family of simple database engines, originally written by Ken Thompson and released by AT&T in 1979. The name is a three letter acronym for database manager.
dbm stores arbitrary data by use of a single key (a primary key) in fixed-size buckets and uses hashing techniques to enable fast retrieval of the data by key.

The hashing scheme used is a form of extensible hashing, so that the hashing scheme expands as new buckets are added to the database, meaning that, when nearly empty, the database starts with one bucket, which is then split when it becomes full. The two resulting child buckets will themselves split when they become full, so the database grows as keys are added.

While dbm and its derivatives are pre-relational databases--effectively a hash fixed to disk--in practice they can offer a more practical solution for high-speed storage looked up by-key as they do not require the overhead of connecting and preparing queries. This is balanced by the fact that they can generally only be opened for writing by a single process at a time. While this can be addressed by the use of an agent daemon which can receive signals from multiple processes, this does, in practice, add back some of the overhead (though not all). In simpler terms, they may be old tech but they're fast.
Ndbm: In 1986 Berkeley produced ndbm (standing for New Database Manager). This added support for having multiple databases open concurrently.
Для справки. А скрипт тебе вроде на винграде уж помогали писать.

M@rtein 25.08.2009 11:41

На винграде не решили проблему

POS_troi 25.08.2009 12:14

скинь в ПМ ссыль на файл.

кажется мне что стоит там lighttpd с mod_mysql_vhost, запросил ТС список модулей , ждемс результата

login999 26.08.2009 09:25

Ссылку на файл в ПМ...
Кажется, я смогу тебе помочь

POS_troi 26.08.2009 09:57

Цитата:

Ссылку на файл в ПМ...
не дает =)

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

login999 26.08.2009 13:07

Блин, подтерли мой пост :(
В двух словах : если ТС не хочет давать файл то пускай катится ко всем чертям.
Попытка телепатии на Python2.6 из стандартных манов
Код:

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. Естественно что скрипт запускать из той директории где лежит сама база

M@rtein 26.08.2009 23:16

Ребят ну что вы в самом деле!, крупный дырявый хостер, сломав один бажный сайт получить можно доступ к сотни. Не могу поделиться файлом. Тем более я же не просто так прошу!!! Спрашивайте необходимую инфу, отвечу. Парсер уже написан, какой то особой ценности не представляеться, так как все аккуратно перенес в MySQL. НО!!! Интересует, потому что несколько месяцев пытался разобраться с форматом хранения данных и хочеться увидеть чисто принципиально, для себя, так как его задумывали хостеры. И как правильно было бы получить информацию из него, а может и иероглифы что то значат...

M@rtein 27.08.2009 00:41

login999 о чудо, подскажи пожалуста как правильно запустить, и наверное придеться закрыть тему и отблагодарить тебя. Ачат рулит!!! login999 респект!!!
Если запускать как я думаю, через cmd, то получаеться ничего
Цитата:

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\M@rtein>C:\Python26\python.exe C:\WebServers\home\bd.r
u\www\bd.py
DATABASE TYPE: None
DATABASE ITEMS:
Traceback (most recent call last):
File "C:\WebServers\home\bd.ru\www\bd.py", line 6, in <module>
db = anydbm.open("vhost.db", 'r')
File "C:\Python26\lib\anydbm.py", line 77, in open
raise error, "need 'c' or 'n' flag to open new db"
anydbm.error: need 'c' or 'n' flag to open new db
но если просто тупо запустить код bd.py на выполнение то видно как там пролетает необходимая инфа.

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

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


Время: 23:43