Здравсвуйте, есть вопрос на который ни где не могу найти ответ. Стоит apache. Пути к сайтам на сервере и информация о них храниться в файле vhost.db. Вопрос в том чем такую бд можно открыть, пробовал различные программы - выдавали ошибку об отсутсвии индекса, повреждение чего то там... Открываю с помощью блокнота очень много непонятных символов. Плюс к тому же записи повторяються по несколько раз... в общем полная неразбериха. Начал копаться выяснил инофрмацию о формате 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
|
Вот вырезка из моего конфига vhost.conf
| Код | # define the map file RewriteMap vhost dbm=DB:conf/vhost
|
На одном из форум подсказали ссылку на следующий код, якобы переводящий из dbm в txt. Что с этим кодом делать не знаю хотел у вас совета спросить - как должен называться входной файл, как запускать скрипт - не знаю. Если кто то может подсказать, то буду очень благодарен если подскажетет как запускать через ActivePerl.
| Код | #!/usr/bin/perl
use NDBM_File; use Fcntl;
tie %fhand,"NDBM_File","demodata",O_RDWR|O_CREAT,0777;
if ($ARGV[0] =~ /^get$/i) { if ($#ARGV == 1) { $result = ($fhand{$ARGV[1]} or "no such entry"); } } if ($ARGV[0] =~ /^set$/i) { if ($#ARGV == 2) { $fhand{$ARGV[1]} = $ARGV[2]; $result = "Database updated"; } } if ($ARGV[0] =~ /^list$/i) { if ($#ARGV == 0) { foreach (sort keys %fhand){ $result .= sprintf ("%8s %s\n", $_,$fhand{$_}); } chop $result; } }
$result ||= "Invalid call"; print "$result\n"; untie %fhand;
|
P.S. Рад любой инфе, если кто то может помочь но нет времени, могу скромно но все же отблагодарить вебманями... |