"Конец ошибки script вывода перед заголовками" в Apache

Apache в Windows дает мне следующую ошибку при попытке получить доступ к моему Perl script:

Server error!

The server encountered an internal error and was unable to complete your request.

Error message: 
End of script output before headers: sample.pl

If you think this is a server error, please contact the webmaster.

Error 500

localhost
Apache/2.4.4 (Win32) OpenSSL/1.0.1e PHP/5.5.3

это мой пример script

#!"C:\xampp\perl\bin\perl.exe"
print "Hello World";

но не работает в браузере

Ответ 1

Если это CGI script для Интернета, вы должны вывести свой заголовок:

#!"C:\xampp\perl\bin\perl.exe"

print "Content-Type: text/html\n\n";
print "Hello World";

Следующее сообщение об ошибке сообщает об этом End of script output before headers: sample.pl

Или даже лучше, используйте CGI для вывода заголовка:

#!"C:\xampp\perl\bin\perl.exe"

use strict;
use warnings;

use CGI;

print CGI::header();
print "Hello World";

Ответ 2

Проверить права доступа к файлам.

У меня была точно такая же ошибка на машине Linux с неправильным набором разрешений.

chmod 755 myfile.pl

решил проблему.

Ответ 3

Для справок в будущем:

Обычно это ошибка, возникающая, когда вы не можете просмотреть или выполнить файл, причиной которого является, как правило, ошибка разрешений. Я бы начал с предложения @Renning и выполнил chmod 755 test.cgi (очевидно, замените test.cgi на имя вашего cgi script здесь).

Если это не работает, вы можете попробовать еще пару вещей. Я однажды получил эту ошибку, когда создал test.cgi как root в другом доме пользователя. Исправлено было выполнение chmod user:user test.cgi, где пользователь - это имя пользователя, в котором вы находитесь.

Последнее, что я могу придумать, это убедиться, что ваш cgi script возвращает правильные заголовки. В моем ruby ​​script я сделал это, положив puts "Content-type: text/html", прежде чем я на самом деле вывел что-либо на страницу.

Счастливое кодирование!

Ответ 4

Вероятно, это блок SELinux. Попробуйте следующее:

# setsebool -P httpd_enable_cgi 1
# chcon -R -t httpd_sys_script_exec_t cgi-bin/your_script.cgi

Ответ 5

Была та же ошибка на малине-пи. Я исправил его, добавив -w в shebang

#!/usr/bin/perl -w

Ответ 6

Итак, для всех, начиная с XAMPP cgi

изменить расширение от pl до cgi
измените разрешения на 755

mv test.pl test.cgi
chmod 755 test.cgi

Он также исправил мою.

Ответ 7

Если вы используете Suexec, убедитесь, что script и его каталог принадлежат тому же пользователю, который вы указали в suexec.

Кроме того, убедитесь, что пользователь, на котором запущен cgi script, имеет разрешения, выполняет разрешения на файл и программу, указанную в shebang.

Например, если мой cgi script начинается с

#! /usr/bin/cgirunner

Тогда пользователю нужны разрешения для выполнения/usr/bin/cgirunner.

Ответ 8

Основываясь на предложениях от всех, я использовал xampp для запуска скриптов cgi. В Windows 8 он работал без каких-либо изменений, но Cent7.0 выдавал такие ошибки, как указано выше.

AH01215: (2) Нет такого файла или каталога: exec из '/opt/lampp/cgi-bin/pbsa_config.cgi' не удалось:/opt/lampp/cgi-bin/pbsa_config.cgi, referer: http://< > /MCB_HTML/TestBed.html

[Wed Aug 30 09: 11: 03.796584 2017] [cgi: error] [pid 32051] [клиент XX: 60624] Конец вывода script перед заголовками: pbsa_config.cgi, referer: http://xx/MCB_HTML/TestBed.html

Try:

Отключено selinux

Учитывая полные разрешения для script, но 755 будет нормально

Я наконец добавил, что -w как ниже

#!/usr/bin/perl -w*

use CGI ':standard';
{

        print header(),
         ...
         end_html();


}

**-w** indictes enable all warnings.It started working, No idea why -w here.