Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Perl: правильные пути в командах


Автор: bnmuser 16.3.2004, 11:54
Пожалуйста, помогите!

Perl не знаю.
Скрипт гостевой книги находится на сервере провайдера под UNIX.
В домашнем каталоге четыре папки - bin, docs, logs.
В папке docs находится весь сайт вместе папкой cgi
В папке cgi находятся скрипты и гостевая книга.

В скрипте есть команда:
Код
push(@INC,"/usr/local/apache/cgi-bin/");
require("cgi-lib.pl");


Как правильно указать путь в этой команде , если для IIS 5.0 WINDOWS 2000 я указываю путь
Код
push(@INC,"Location:http://www.firma.com/cgi/");
require("cgi-lib.pl");

и все работает нормально.
Наверное , для UNIX путь указывается как-то по другому.

Этот же вопрос для команд
Код
#  if (-e "quest/.questlock") {
   # The file existed, time to take a nap
#    sleep(1);
#    }

В Windows я ставлю
Код
#  if (-e "Location:http://www.firma.com/cgi/.questlock") {
   # The file existed, time to take a nap
#    sleep(1);
#    }
#  else {


и
Код
# Create the lock file, thereby locking the guestbook
   open(LOCK,">quest/.questlock");
   close LOCK;

в W2000 :
Код
# Create the lock file, thereby locking the guestbook
   open(LOCK,">Location:http://www.firma.com/cgi/.questlock");
   close LOCK;



и, последняя

Код
# unlock the file
   unlink("quest/.questlock");

в W2000 :
Код
# unlock the file
   unlink("Location:http://www.firma.com/cgi/.questlock");


Спасибо.



Автор: korob2001 16.3.2004, 22:13
Цитата

В домашнем каталоге четыре папки - bin, docs, logs.
В папке docs находится весь сайт вместе папкой cgi
В папке cgi находятся скрипты и гостевая книга.

Попробуй так:
/cgi/ или /cgi-bin/
т.е. первый слеш указывает, что путь начинается с корневого каталога. Затем указывает на папку cgi или cgi-bin, это зависит от того какая директория предназначена для CGI скриптов, обычно это cgi-bin, но может быть и cgi.

Этот путь был для этого:
push(@INC,"/usr/local/apache/cgi-bin/");
require("cgi-lib.pl");

Для всех остальных случаях, путь должен быть таким:
/cgi/guest/.guestlock или /cgi-bin/guest/.guestlock

Удачи.

Автор: bnmuser 6.4.2004, 06:16
Korob2001, спасибо.
Все сделал.
Не пошло.
Провайдер долго молчал, но потом все-таки что-то сделал (наверное, дал разрешения на исполнение скриптов и , еще, раскидал по разным папкам скрипт и guest_book.htm) и скрипт начал вроде бы выполняться, выходит на завершение без ругани, но текст сообщения в гостевую книгу не записывается.

Теперь вопросы по командам.
Подскажите пожалйста, что означают команды


Код
#  if (-e "quest/.questlock") {
  # The file existed, time to take a nap
#    sleep(1);
#    }


Код
# Create the lock file, thereby locking the guestbook
  open(LOCK,">quest/.questlock");
  close LOCK;


Код
# open and read in the old guestbook
   # Note: Creating a backup copy of the file might not be a bad idea ...
  open(GB,"<quest/quest.htm";

@lines = <GB>;
close GB;[/code]
Код
# unlock the file
  unlink("quest/.questlock");


Файлов и папок quest у меня вообще нет.
Если можно, поподробнее, пожалуйста.

Спасибо.

Автор: korob2001 6.4.2004, 20:15
Код

#  if (-e "quest/.questlock") {
# The file existed, time to take a nap
#    sleep(1);
#    }

В первую очередь:
# - означает комментарии, то есть всё, что находится за этим символом, будет пропущено интерпритатором.

if ( -e "guest/.guestlock") {
sleep(1);
}

Проверяем существует ли файл .guestlock в каталоге guest, если да, то выполняется блок, в данном случае у нас в блоке 1 оператор sleep(1).

sleep(1) - означает заснуть на 1 секунду, другими словами ,программа приостанавливается на 1 секунду в том случае, если в каталоге guest/ есть файл или вложенный каталог с именем.guestlock.

Код

# Create the lock file, thereby locking the guestbook
 open(LOCK,">quest/.questlock");
 close LOCK;


open(LOCK, ">guest/.guestlock");
- открывает файл .guestlock из каталога guest/ для записи и присваивает ему дескриптор LOCK.

close( LOCK ) - закрывает файл связанный с дескриптором LOCK


open(GB,"<quest/quest.htm")
- открывает файл guest.htm из каталога guest для чтения и связывает с ним дескриптор GB.

@lines = <GB>; - записываем содержимое всего файла ,связанного с дескриптором GB, в массив @lines. В данном случае, название массива говорит само за себя, так как каждый элемент массива будет содержать каждую отдельную строку файла, такое поведение можно изменить при помощи переменной $/. Кстати этот способ чтения файла не самый лучший, так как содержимое всего файла помещается в оперативную память, а она, как известно, ограничена, как и всё в этом мире. Если файл не слишком большой, то можно и удобнее воспользоваться этим способом, но если размер файла может перевалить, ну скажем, за 100 mb и более ,то лучше воспользоваться таким способом чтения файла:
Код

while ( <GB> ) {
   # Делаем что-то с каждой сторокой файла
}

При таком подходе нет необходимости писать весь файл в оперативную память, мы обрабатываем файл любого размера построчно. По возможности советую преобрести привычку пользоваться только таким способом чтения файлов. Это будет хорошая привычка. ;)

close GB - закрываем файл, связанный с дескриптором GB

unlink("quest/.questlock") - удаляет файл .guestlock из каталога guest

Удачи ;)

Автор: Гость_Kenjik 18.5.2004, 09:07
withstupid.gif Я установил программу phpdev 4.5 поскольку мне препод требовал. Рhpdev 4.5 - это сервер, туда входят все пакеты программ(mysql, apache, perl, php). Выходит так, что программа на Perl-лe не вызывает БД (mysql). А php вызывает нормально! Что делать, помогите!

Автор: Guest 18.5.2004, 10:04
korob2001 withstupid.gif Может ты поможешь! Я установил программу phpdev 4.5 поскольку мне препод требовал. Рhpdev 4.5 - это сервер, туда входят все пакеты программ(mysql, apache, perl, php). Выходит так, что программа на Perl-лe не вызывает БД (mysql). А php вызывает нормально! Что делать, помогите! mad.gif

Автор: korob2001 18.5.2004, 14:07
Каким образом ты пытаешься подключиться к БД ( часть кода )?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)