Forum Webscript.Ru

Программирование => Perl => Тема начата: docker от 23 Мая 2005, 11:12:24

Название: Как восстановить доступ к dbm файлу?
Отправлено: docker от 23 Мая 2005, 11:12:24
Добрый день!
Ситуация следующая. Сайт переносится с одного хостинга на другой.
В одном из разделов используется dbm база данных, и perl скрипт к ней обращается.


dbmopen(%db,$root_path."cgi/db/news",0640) || print "$!";
 foreach (sort { $b <=> $a } keys %db){
.....
.....


в папке cgi/db находится файлы news, news.db, news.dir, news.pag и другие.

Все это было перенесено со старого хостинга и в том же виде выложено на новый.
Но при запуске этого скрипта, обращающегося к базе новостей, выводится:
Inappropriate file type or format

Попытки изменения прав доступа на папку cgi, db - ситуацию не изменили.

Вопросы:
Что нужно сделать чтобы тот же скрипт подцепил dbm-файлы в случае, если все копируется с другого хостинга.
Другой выход - создать пустую одноименную базу данных (сохранение данных не актуально) этого же формата, главное чтобы этот же скрипт с ней работал. Нашел только функцию dbmopen, где уже при созданиии нужно указывать пользователя и его пароль, что мне совсем непонятно для чего, непонятно так же как создавать там структуру таблицы и все остальное. В мануалах тех, которые я нашел, ничего про это не было сказано.

Еще буду рад за любые достойные мануалы по работе с dbm.

Спасибо!
Название: Как восстановить доступ к dbm файлу?
Отправлено: cr4ck3r от 23 Мая 2005, 12:21:26
А до этого хостинг у вас не виндовый был случайно?
По моему dbm файлы получают расширения pag и dir только на виндах. на никсах создается один файл с расширением db. Незнаю насколько в этом случае сохраняется кроссплатформенность.
Название: Как восстановить доступ к dbm файлу?
Отправлено: NeoNox от 23 Мая 2005, 12:29:37
cr4ck3r расширение не имеет значения.

docker какой DB менеджер использовался в скрипте?
Если старый хостинг еще существует, нужно написать конвертор в csv и провести обратную операцию на новом сервере.
Все это происходит из-за отличия версий DB менеджеров на этих системах.
Название: Как восстановить доступ к dbm файлу?
Отправлено: docker от 23 Мая 2005, 12:41:52
> docker какой DB менеджер использовался в скрипте?
На старом хостинге? Информации об этом нет.
Это можно узнать только через ssh или напрямую спросив у провайдера? Аналога phpinfo в perl-е нет?

> Если старый хостинг еще существует, нужно написать конвертор в csv и провести обратную операцию на новом сервере.

А какой операцией осуществляется переконвертация csv в dbm на новом хостинге? Можно об этом поподробней пожалуйста. Спасибо!
Название: Как восстановить доступ к dbm файлу?
Отправлено: NeoNox от 23 Мая 2005, 12:53:47
Цитировать
docker:
> docker какой DB менеджер использовался в скрипте? На старом хостинге? Информации об этом нет.

У тебя разные скрипты на этих серверах??
Я имел ввиду в самой верхушке скрипта есть подключение менеджера DB командой use. Посмотри.
Цитировать
docker:
А какой операцией осуществляется переконвертация csv в dbm на новом хостинге? Можно об этом поподробней пожалуйста.

Можно. Пишем скрипт.
1) Открываем csv файл
2) Считываем данные и  разбиваем на хеш ключ=> значение по сепаратору
3) Открываем dbm базу
4) Записываем хеш
Все.
Название: Как восстановить доступ к dbm файлу?
Отправлено: docker от 23 Мая 2005, 13:00:16
> У тебя разные скрипты на этих серверах??
> Я имел ввиду в самой верхушке скрипта есть подключение менеджера DB командой use. Посмотри.

Там ничего такого нет,только:

use CGI qw(param);
use LWP::UserAgent;


По-умалчанию значит какой-то используется? А какой?
Название: Как восстановить доступ к dbm файлу?
Отправлено: docker от 23 Мая 2005, 13:03:37
Да и еще, на новом хостинге мне создать новую одноименную базу через dbmopen?

А какие туда имя польователя и пароль записывать? Любые? Просто  насколько я понял, этот логин и пароль нигде не используется.

??
Название: Как восстановить доступ к dbm файлу?
Отправлено: NeoNox от 23 Мая 2005, 13:13:06
По умолчанию используется один из драйверов: dbm, ndbm, sdbm, gdbm, или Berkeley DB. Точнее тебе никто не скажет.