"Конец ошибки 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.