ROBOWEB : Документация : FAQ по perl и программированию для web: Web серверы : html, perl, cgi, php, css, 3dmax - 3D Studio русская документация с примерами программ, RTFM и описание протоколов, описание dreamweaver, все для вебдизайнера
Разработка сайтов, web дизайн - Центр Русского Дизайна HOD.RU
FLASH
3D Studio MAX
DreamWeawer FAQ
Изучение HTML
META тэги
CSS
Руководство по стилям
Спецификация WML (WAP)
Язык DHTML
Спецификация XML
Руководство по Java
Документация по JavaScript
Язык HOD Text Processor
Интерфейс CGI
Документация по Perl 5
Perl FAQ
Документация по PHP
PHP/FI 2.0
Документация по SQL
Базы данных
Доступ к БД

Рейтинг@Mail.ru Rambler's Top100

Веб дизайнеру
Каталог сайтов Axes.ru


5. Web серверы

5.1 Как заставить WWW сервер исполнять CGI-программы?

Apache для Unix/Win32

Надо отредактировать конфигурационные файлы (я рассчитываю, что у вас default конфиги apache) (NB: Apache/1.3.6 и выше по умолчанию конфигурируется только файлом httpd.conf. Директивы все остались прежние, просто их слили в один файл)

Способ 1

srm.conf Директива ScriptAlias

ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/

и в файле access.conf прописать

<Directory /usr/local/apache/cgi-bin/>
 Options ExecCGI
  </Directory>
(если пригляделся, там нужно только раскоментировать опции) Это позволит вам помещать программы в каталог /usr/local/apache/cgi-bin/ и они будут видны по URL http://you/cgi-bin/program_name

Способ 2

Добавить в srm.conf директиву AddHandler cgi-script .cgi и вы сможете вызывать cgi-программу из любого каталога. Но она должна иметь окончание .cgi и для нее должно быть разрешено исполнение CGI (Options ExecCGI в access.conf, написано выше). Оба способа можно без проблем использовать совместно.

5.2 Мой CGI-скрипт не работает! Как установить причину?

Прежде чем читать дальше, убедитесь в том, что:

  • Вы запустили скрипт с командной строки (не через CGI!!!) и он работает, а не говорит "compilation stopped due to errors"
  • Скрипт не только работает, но и выдает нужный заголовок с пустой строкой после него
  • Для многопользовательских систем) Вы сделали тоже под пользователем, под которым работает сервер (su -m имя_пользователя -c script в Unix) и он столь же благополучно работает

5.3 Ошибки HTTP 500 и 403. Что это значит и что с ними делать

error_log для того и служит, чтобы туда смотреть :-)

Ошибка 403 "Forbidden"

Возникает, если сервер не может отдать вам содержимое по причине отсутствия полномочий.

Проверьте:

  • Может ли user (для apache под Unix это обычно nobody), под которым работает, сервер исполнять файл?
  • В частности, может ли сервер исполнять интерпретатор (в случае скриптовых языков)?
  • Можно ли для этого каталога исполнять программы CGI? (Options ExecCGI для apache)

Ошибка 500 "Internal Server Error"

Возникает в случае внутренней ошибки.

Проверьте:

  • Выводите ли вы строку "Content-Type:"?
  • Правильно ли вы ее выводите? (Content-type, Content_Type -- неправильно)
  • Заканчиваете ли вы хедеры пустой строкой? Нельзя написать print "Content-Type: text/html\n"; print "<HTML>\n"; Надо писать: print "Content-Type: text/html\n\n"; # Два "\n" print "<HTML>\n";

Также, эта ошибка возникает, если CGI-программа завершилась с ненулевым кодом возврата, что часто встречается в случае некомпилируемости вашего скрипта perl'ом.

Совет: делайте use CGI::Carp qw(fatalsToBrowser) во время отладки, тогда вам выдадут сообщение об ошибке perl.

5.4 Почему $ENV{REMOTE_HOST} пуста?

apache устанавливает переменную окружения REMOTE_HOST, если ему разрешено проводить dns запросы для определения имени. Для 1.3.x по-умолчанию это выключено. Включается/выключается директивой HostNameLookups, которая может принимать 3 значения: on -- проводить запросы, off -- не запрашивать dns и double -- делать двойные запросы: запрашивать имя хоста, а затем по имени запрашивать ip адрес, для безопасности.

5.5 Почему $ENV{REMOTE_USER} пуста?

Переменная окружения REMOTE_USER устанавливается apache в случае, если скрипт защищен паролем. Как это сделать рассказано на http://www.apacheweek.com/features/userauth и http://www.apacheweek.com/features/dbmauth



Содержание