PHP и amp; PHP Mailer - конец вывода скрипта перед заголовками: [duplicate]

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

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

это мой пример скрипта

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

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

12
задан 11 March 2014 в 00:06

9 ответов

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

, измените расширение с pl на cgi, измените разрешения на 755

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

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

2
ответ дан 15 August 2018 в 16:52

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

#!"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";
14
ответ дан 15 August 2018 в 16:52
  • 1
    Еще лучше, напечатайте «Content-type: text / plain & quot; заголовок, если вы отправляете простой текст, а не HTML :-) – Dave Cross 11 March 2014 в 16:00

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

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

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

#! /usr/bin/cgirunner

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

2
ответ дан 15 August 2018 в 16:52

Внутренняя ошибка вызвана символом HIDDEN в конце строки shebang !! т.е. строка #! / usr / bin / perl

Добавив - или -w в конец, перемещайте символ от «perl», позволяя найти путь к процессору perl и выполнить скрипт ,

HIDDEN charatoror создается редактором, используемым для создания скрипта

0
ответ дан 15 August 2018 в 16:52

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

# setsebool -P httpd_enable_cgi 1
# chcon -R -t httpd_sys_script_exec_t cgi-bin/your_script.cgi
4
ответ дан 15 August 2018 в 16:52

Основываясь на предложениях от всех, я использовал 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: // & lt;> /MCB_HTML/TestBed.html [Wed Aug 30 09: 11: 03.796584 2017] [cgi: error] [pid 32051] [клиент XX: 60624] Конец вывода сценария перед заголовками: pbsa_config.cgi, referer: http: //xx/MCB_HTML/TestBed.html

Попробуйте:

Отключено selinux

Учитывая полные разрешения для скрипта, но 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.
0
ответ дан 15 August 2018 в 16:52

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

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

chmod 755 myfile.pl

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

14
ответ дан 15 August 2018 в 16:52

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

#!/usr/bin/perl -w
3
ответ дан 15 August 2018 в 16:52
  • 1
    Кто-то хочет объяснить, почему? Он работает для меня, но не имеет смысла, потому что я уже использовал «предупреждения»; – Gustavo Puma 28 October 2017 в 21:08

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

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

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

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

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

6
ответ дан 15 August 2018 в 16:52

Другие вопросы по тегам:

Похожие вопросы: