Внутренняя ошибка сервера 500 на Apache для сценария perl

У меня есть perl-скрипт в cgi-bin. Сначала он выводит следующие операторы

print "Status: 200 OK\nContent-Type: text/html\n\n";

Он отлично генерирует html-форму на терминале, но когда я пытаюсь запустить ее в браузере, выдает следующую ошибку

Внутренняя ошибка сервера Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Пожалуйста, свяжитесь с администратором сервера по адресу [адрес не указан], чтобы сообщить ему время возникновения этой ошибки и действия, которые вы выполняли непосредственно перед этой ошибкой.

Я включил cgi-bin в конфигурации apache, журнал ошибок печатает следующую ошибку

Конец вывода скрипта перед заголовками

В чем может быть проблема и как ее решить


person Brownie Scavengers    schedule 10.03.2016    source источник


Ответы (2)


Вы должны сделать так, чтобы Content-Type был первым, что будет напечатано на экране. Также убедитесь, что скрипт установлен как исполняемый.

print "Status: 200 OK\nContent-Type: text/html\n\n";

Должно быть:

print "Content-Type: text/html\n\nStatus: 200 OK\n";
person Steven Carlson    schedule 10.03.2016
comment
Я сделал это, это не сработало, статус 200 только для проверки, генерирует ли он форму на терминале, скрипт является исполняемым, что вы думаете, что мы должны делать? - person Brownie Scavengers; 11.03.2016
comment
Я сделал, получил следующую ошибку [cgid:error] Конец вывода скрипта перед заголовками - person Brownie Scavengers; 12.03.2016
comment
Сценарий, приведенный выше, является полным сценарием, верно? У вас есть доступ по SSH к вашему серверу? Если это так, попробуйте запустить скрипт через SSH (perl ‹script_name.pl›) - person Steven Carlson; 12.03.2016
comment
Нет, это не полный скрипт, он слишком длинный, а также генерирует вывод HTML. Я проверил форму, сгенерированную путем копирования и вставки вывода в HTML-файл после запуска скрипта из терминала. HTML-файл отлично работает отдельно, но не с apache. Как вы думаете, что мы должны с этим делать? - person Brownie Scavengers; 16.03.2016
comment
Для тестирования я ставлю тест печати; __END__ в моих кодах и продолжайте построчно, пока не найду строку, вызывающую сбой. - person Steven Carlson; 16.03.2016

Сценарий также должен быть исполняемым Apache, чтобы он работал.

chmod a+x YourScript.pl

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

#!/usr/bin/perl

use strict;
print "Status: 200\nContent-Type: text/html\n\n";

print "<p>Foo</p>";
person Chris Turner    schedule 10.03.2016
comment
Скрипт исполняемый и выдает ту же ошибку, как вы думаете, что нам делать? - person Brownie Scavengers; 11.03.2016
comment
Не могли бы вы попробовать сценарий, который я предоставил выше, и посмотреть, работает ли он? - person Chris Turner; 11.03.2016
comment
Похоже, проблема в вашем коде. Учитывая, что вы не получаете никаких других ошибок в журнале, вероятная проблема заключается в том, что ваш скрипт ничего не выводит, даже заголовки. - person Chris Turner; 16.03.2016