perl — & quot; конец вывода скрипта перед заголовками & quot; ошибка в Apache

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";

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

15

Решение

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

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

chmod 755 myfile.pl

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

16

Другие решения

Если это 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

Для дальнейшего использования:

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

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

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

Удачного кодирования!

6

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

#!/usr/bin/perl -w
4

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

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

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

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

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

#! /usr/bin/cgirunner

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

2

Так что для всех, кто начинает с XAMPP CGI

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

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

Это исправило и мою.

2

Внутренняя ошибка из-за скрытого символа в конце строки Шебанга !!
то есть строка #! / usr / bin / perl

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

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

1
По вопросам рекламы [email protected]