Почему не работает мой Perl CGI скрипт? - PullRequest
1 голос
/ 02 августа 2009

Я действительно не понимаю, как запустить файл Perl. Я загрузил мой .pl в cgi-bin, затем chmod на 755. Затем, когда я запускаю файл, я просто получаю внутреннюю ошибку 500.

**/cgi-bin/helloworld.pl**


#!/usr/bin/perl

print 'hello world';

Есть идеи, что я делаю не так?

Ответы [ 7 ]

15 голосов
/ 02 августа 2009

Прочтите официальный FAQ по Perl CGI .

Это ответит на это и на многие другие вопросы, которые у вас могут возникнуть.

Например: «Мой CGI-скрипт запускается из командной строки, но не из браузера. (500 Ошибка сервера)» *

Надеюсь, это поможет!

10 голосов
/ 02 августа 2009

Вам, вероятно, нужно что-то вроде

print "Content-type: text/html\n\n";

до вашего заявления на печать. Взгляните на http://httpd.apache.org/docs/2.0/howto/cgi.html#troubleshoot

Это поможет узнать, какой сервер вы используете, и точное сообщение об ошибке, которое отображается в журналах сервера. Я предполагаю, что если вы используете Apache, вы увидите что-то вроде «Преждевременный конец заголовка скрипта».

3 голосов
/ 05 августа 2009
3 голосов
/ 03 августа 2009

Изучите использование CGI :: Carp для вывода фатальных ошибок в браузер. use CGI::Carp qw(fatalsToBrowser);

Также, пожалуйста, обязательно используйте модуль CGI для вывода любой необходимой информации, такой как заголовки / html / что угодно. Печать всего этого - неправильный способ сделать это.

РЕДАКТИРОВАТЬ: Вы также определенно сможете проверить какой-либо журнал ошибок.

2 голосов
/ 03 августа 2009

Сначала найдите путь к perl в этой системе и убедитесь, что линия Шебанга правильная. Предоставление дополнительной информации о системе и веб-сервере также поможет другим диагностировать.

Затем попробуйте:

#!/path/to/perl/binary

use strict;
use warnings;

$| = 1;

use CGI qw( :default );

print header('text/plain'), "Hello World\n";
1 голос
/ 03 августа 2009

Убедитесь, что вы можете запустить скрипт из командной строки, не вызывая его через Perl. Другими словами, вы должны иметь возможность перейти в каталог cgi-bin и набрать:

./helloworld.pl

и получите вывод. Если это не сработает, исправьте это. При просмотре вывода первая строка должна быть:

Content-Type: text/html

(или text/plain или другой допустимый тип MIME.)

Если это не так, исправьте это.

Тогда у вас должна быть пустая строка, прежде чем будет напечатано тело вашей страницы. Если нет пустой строки, ваш скрипт не будет работать как скрипт CGI. Таким образом, ваш общий результат должен выглядеть следующим образом:

Content-Type: text/html

hello world

Если вы можете запустить свой скрипт и это вывод, то происходит что-то странное. Если Apache не регистрирует ошибку в файле error_log, возможно, есть какая-то проблема с ним.

0 голосов
/ 23 сентября 2009

Включили ли вы Apache для сервера .pl файлов в качестве CGI-скриптов? Проверьте файл конфигурации Apache или (быстрый, но не гарантированный тест) попробуйте изменить расширение файла на .cgi. Также убедитесь, что ваша линия Шебанга (#!) находится на самом верху. Наконец, проверьте, что строки заканчиваются на Unix, если ваш сервер Linux. И да, протестируйте его из командной строки и use strict; для лучшей обратной связи о потенциальных ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...