1_0_1.gif 1_2_1.gif
 
FAQ по Java
FAQ по CGI и Perl
FAQ по халяве в интернете
FAQ по взлому
 
 
 
 

WWW-специфика

Вопрос: Я положил скрипт на сервер, ввожу его путь в браузер, но вместо того, чтобы выполнять скрипт, браузер выводит его исходный текст.
Ответ : Чтобы сервер запускал скрипт и выдавал результаты его работы, необходимо объяснить серверу, что этот файл - исполняемый. Существующее в unix-системах понятие "атрибуты файла" отличается от атрибутов в DOS/Windows, и в unix исполняемый файл определяется не расширением, а атрибутом. Если сервер работает на unix-системе, необходимо проставить на файл атрибуты исполняемого файла. Это делает команда "chmod 0755 file", если вы работаете через telnet или ssh, или же продвинутый FTP-клиент типа CuteFTP или FAR ftp plugin. Атрибуты файла, который могут исполнять все желающие (в том числе и сервер), выглядят в буквенном представлении, как
-rwxr-xr-x

Вопрос: При попытке запустить скрипт происходит Internal Server Error! Что это за ошибка?
Ответ : Это, строго говоря, просто сообщение об одной из ошибок, приведших к невозможности нормального выполнения скрипта. Чаще всего возникает в следующих случаях:

  1. в первой строке нет или неправильно указан путь к perl. обычно это
    #!/usr/local/bin/perl или #!/usr/bin/perl

  2. Файл со скриптом содержит DOS-овые концы строк 0x0D 0x0A. В юниксе конец строки - только 0x0A. Чтобы исправить это, воспользуйтесь соотв. возможностью редактора FAR, или при закачке скрипта на ftp используйте ASCII-режим вместо бинарного.

  3. Скрипт не выводит ничего во время работы. Hеобходимо, чтобы он выводил хотя-бы content-type заголовок, например:

  4.    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

Минусы этого метода:

  1. Все параметры видны в строке. Если в кач-ве параметров передается пароль - получается дырка в безопасности

  2. Длина данных, передаваемых таким методом, ограничена.

  3. 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


Назад        Дальше

 
Сайт создан в системе uCoz