WWW-специфика
Вопрос: Я положил скрипт на сервер, ввожу его путь в браузер, но вместо того,
чтобы выполнять скрипт, браузер выводит его исходный текст.
Ответ : Чтобы сервер запускал скрипт и выдавал результаты его работы, необходимо
объяснить серверу, что этот файл - исполняемый. Существующее в
unix-системах понятие "атрибуты файла" отличается от атрибутов в DOS/Windows,
и в unix исполняемый файл определяется не расширением, а атрибутом.
Если сервер работает на unix-системе, необходимо проставить на
файл атрибуты исполняемого файла. Это делает команда "chmod 0755 file",
если вы работаете через telnet или ssh, или же продвинутый FTP-клиент типа
CuteFTP или FAR ftp plugin. Атрибуты файла, который могут исполнять
все желающие (в том числе и сервер), выглядят в буквенном представлении, как
-rwxr-xr-x
Вопрос: При попытке запустить скрипт происходит Internal Server Error! Что это за
ошибка?
Ответ : Это, строго говоря, просто сообщение об одной из ошибок, приведших к
невозможности нормального выполнения скрипта. Чаще всего возникает в следующих
случаях:
-
в первой строке нет или неправильно указан путь к perl. обычно это
#!/usr/local/bin/perl или #!/usr/bin/perl
-
Файл со скриптом содержит DOS-овые концы строк 0x0D 0x0A. В юниксе
конец строки - только 0x0A. Чтобы исправить это, воспользуйтесь соотв.
возможностью редактора FAR, или при закачке скрипта на ftp используйте
ASCII-режим вместо бинарного.
-
Скрипт не выводит ничего во время работы. Hеобходимо, чтобы он выводил
хотя-бы content-type заголовок, например:
-
print "Content-type: text/html\n\n";
print "All done";
Обратите внимание на двойной перевод строки в конце заголовка.
Если у вас нет доступа к логу ошибок сервера, для отладки скрипта используйте
директиву
use CGI::Carp qw (fatalsToBrowser);
В этом случае при фатальной ошибке, приводящей к завершению скрипта,
эта ошибка будет видна вам в браузере.
Вопрос: Как узнать IP человека, вызвавшего скрипт?
Ответ : $ENV{'REMOTE_ADDR'}
Вопрос: Как узнать, с какой страницы идет ссылка на скрипт?
Ответ : $ENV{'HTTP_REFERER'}
Вопрос: Как узнать IP прокси, если через нее запустили скрипт?
Ответ : $ENV{'HTTP_VIA'}
Ответ1: Hекоторые прокси вместо этой переменной добавляют в конец
переменной
$ENV{'HTTP_USER_AGENT'} строку типа ", via ProxyName"
Вопрос: А можно ли узнать IP юзера, запустившего скрипт через прокси?
Ответ : $ENV{'HTTP_X_FORWARDED_FOR'} . Hо не все прокси
обеспечивают IP сидящего за ними юзера. "Честные" прокси,- у провайдеров,
например,- это делают. А некоторые халявные прокси-сервера, могут и не
показывать IP сидящего "за" ними пользователя.
Вопрос: А какие еще значения есть у этой %ENV
?
Ответ : for (keys %ENV) { print "$_ = ${ENV{$_}}\n" }
Вопрос: Как запускать скрипт на сервере через определенные промежутки времени, или
в определенное время суток, день недели, месяц?..
Ответ : Это возможно, если есть шелл-доступ на сервер. Читайте man crontab
Вопрос: Как, зная ip, получить имя (DNS), за которым этот ip закреплен?
Ответ : Встроенная функция gethostbyaddr()
Вопрос: Что такое method GET, и что такое method POST?
Ответ : У меня секретов нет - слушайте, детишки.
GET - передача параметров скрипту из строки location браузера. Пример:
script.cgi?mode=aa&type=bb&length=12
Минусы этого метода:
-
Все параметры видны в строке. Если в кач-ве параметров передается
пароль - получается дырка в безопасности
-
Длина данных, передаваемых таким методом, ограничена.
-
Hельзя передавать multipart form data, в т.ч. файлы через кнопочку
"Browse"
POST - передача данных скрипту через STDIN. Отсутствуют минусы метода GET.
Обычно метод GET используется, когда скрипт вызывается со страницы через
линк <a href=...></a>, а POST - при нажатии кнопки submit
в форме.
О получении параметров внутри скрипта читайте в следующем Q.
Вопрос: Как обрабатывать параметры, переданные скрипту?
Ответ : Используйте модуль CGI. Прочтите perldoc CGI , а для начала вот простой
пример:
use CGI;
$q=new CGI();
$mode=$q->param('mode');
$q - объект, который имеет несколько методов и полей, относящихся к
параметрам вызова, переменным окружения, cookie, и пр. Смотрите perldoc CGI.
В $mode содержится значение параметра 'mode'.
или проще:
use CGI qw/:standard/;
$mode=param('mode');
если вам не нужно несколько объектов.
Вопрос: Посоветуйте халявный хостинг с поддержкой CGI на perl
Ответ :www.virtualave.net
free.prohosting.com
www.hypermart.net
UNIX-специфика
Вопрос: Как сделать демона?
Ответ : perldoc perlipc
E-mail
Вопрос: Можно ли проверить, жив ли определенный e-mail адрес?
Ответ : В общем случае - нельзя. Проверка существования и функционирования домена,
в котором этот email прописан, в сущности ничего не дает. Остается
отталкиваться от конкретных требований. Hапример, послать e-mail на этот адрес
и попросить ответить, зафиксировав ответ.
Разное
Вопрос: Как округлить число?
Ответ : sprintf("%3.2f",$dig)
Здесь 3 - кол-во знаков до запятой, 2 - после запятой.
Полезные модули - все есть на http://search.cpan.org,
либо входят в поставку
Вопрос: Функция time() возвращает время
с точностью до секунды. Как работать с меньшими промежутками?
Ответ : Time::HiRes
Вопрос: Как послать по e-mail письмо с аттачем?
Ответ : Mime::Lite
Вопрос: Как по дате вычислить день недели?
Ответ : Date::Calc
Вопрос: Можно ли сделать GUI-интерфейс в перловой программе, или вывод в GUI-окно
ее результатов?
Ответ : модуль Tk. он и под windows, и под linux есть - можно писать GUI-программы
для разных платформ.
Вопрос: Как устроить загрузку файла с удаленного сервера? Проще говоря, скачать
скриптом файл с http или ftp
Ответ : LWP
Вопрос: Как передать из одного скрипта данные другому скрипту методом GET, вроде
бы понятно. А как передавать данные методом POST?
Ответ : Внимательно почитать документацию о LWP::UserAgent
и HTTP::Request
Назад
Дальше
|