Error message end of script output before headers

Apache on Windows gives me the following error when I try to access my Perl script: Server error! The server encountered an internal error and was unable to complete your request. Error message:...

Apache on Windows gives me the following error when I try to access my 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

this is my sample script

#!"C:xamppperlbinperl.exe"
print "Hello World";

but not working on browser

asked Mar 10, 2014 at 17:50

user3367242's user avatar

user3367242user3367242

3751 gold badge4 silver badges8 bronze badges

4

Check file permissions.

I had exactly the same error on a Linux machine with the wrong permissions set.

chmod 755 myfile.pl

solved the problem.

Ruskin's user avatar

Ruskin

5,4603 gold badges44 silver badges62 bronze badges

answered Jul 15, 2014 at 10:05

Renning's user avatar

RenningRenning

3513 silver badges2 bronze badges

1

If this is a CGI script for the web, then you must output your header:

#!"C:xamppperlbinperl.exe"

print "Content-Type: text/htmlnn";
print "Hello World";

The following error message tells you this End of script output before headers: sample.pl

Or even better, use the CGI module to output the header:

#!"C:xamppperlbinperl.exe"

use strict;
use warnings;

use CGI;

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

Chris Emerson's user avatar

answered Mar 10, 2014 at 18:14

Miller's user avatar

MillerMiller

34.9k4 gold badges39 silver badges60 bronze badges

1

For future reference:

This is typically an error that occurs when you are unable to view or execute the file, the reason for which is generally a permissions error. I would start by following @Renning ‘s suggestion and running chmod 755 test.cgi (obviously replace test.cgi with the name of your cgi script here).

If that doesn’t work there are a couple other things you can try. I once got this error when I created test.cgi as root in another user’s home. The fix there was to run chmod user:user test.cgi where user is the name of the user who’s home you’re in.

The last thing I can think of is making sure that your cgi script is returning the proper headers. In my ruby script I did it by putting puts "Content-type: text/html" before I actually outputted anything to the page.

Happy coding!

answered Dec 13, 2015 at 20:13

watzon's user avatar

watzonwatzon

2,3911 gold badge33 silver badges62 bronze badges

Probably this is an SELinux block. Try this:

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

Michael Mrozek's user avatar

answered Jan 5, 2015 at 14:50

kod's user avatar

kodkod

811 silver badge1 bronze badge

Had the same error on raspberry-pi. I fixed it by adding -w to the shebang

#!/usr/bin/perl -w

Tunaki's user avatar

Tunaki

130k46 gold badges326 silver badges414 bronze badges

answered Mar 5, 2016 at 14:00

Carter Brown's user avatar

1

You may be getting this error if you are executing CGI files out of a home directory using Apache’s mod_userdir and the user’s public_html directory is not group-owned by that user’s primary GID.

I have been unable to find any documentation on this, but this was the solution I stumbled upon to some failing CGI scripts. I know it sounds really bizarre (it doesn’t make any sense to me either), but it did work for me, so hopefully this will be useful to someone else as well.

answered Feb 20, 2019 at 18:22

jayhendren's user avatar

jayhendrenjayhendren

4,1271 gold badge35 silver badges56 bronze badges

2

Since no answer is accepted, I would like to provide one possible solution. If your script is written on Windows and uploaded to a Linux server(through FTP), then the problem will raise usually. The reason is that Windows uses CRLF to end each line while Linux uses LF. So you should convert it from CRLF to LF with the help of an editor, such Atom, as following
enter image description here

answered Jan 4, 2019 at 12:39

Ian's user avatar

If using Suexec, ensure that the script and its directory are owned by the same user you specified in suexec.

In addition, ensure that the user running the cgi script has permissions execute permissions to the file AND the program specified in the shebang.

For example if my cgi script starts with

#! /usr/bin/cgirunner

Then the user needs permissions to execute /usr/bin/cgirunner.

answered Mar 18, 2015 at 3:23

Despertar's user avatar

DespertarDespertar

21.1k9 gold badges75 silver badges78 bronze badges

Internal error is due to a HIDDEN character at end of shebang line !!
ie line #!/usr/bin/perl

By adding - or -w at end moves the character away from «perl» allowing the path to the perl processor to be found and script to execute.

HIDDEN character is created by the editor used to create the script

smonff's user avatar

smonff

3,3513 gold badges39 silver badges46 bronze badges

answered Apr 11, 2018 at 15:59

Tony Goertz's user avatar

So for everyone starting out with XAMPP cgi

change the extension from pl to cgi
change the permissions to 755

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

It fixed mine as well.

Alexis Wilke's user avatar

Alexis Wilke

18.4k10 gold badges80 silver badges146 bronze badges

answered Sep 5, 2014 at 16:46

crustycollins's user avatar

In my case I had a similar problem but with c ++ this in windows 10, the problem was solved by adding the environment variables (path) windows, the folder of the c ++ libraries, in my case I used the codeblock libraries:

C:codeblocksMinGWbin

answered Jun 3, 2020 at 15:47

Henry Lizama's user avatar

This is my case.

Only two line in the script:

#!/usr/bin/sh

echo "Content-type: text/plain"

give the error 500.

adding this line, after the first echo:

echo ""

don’t give the error.

Tyler2P's user avatar

Tyler2P

2,28118 gold badges23 silver badges29 bronze badges

answered Mar 23, 2022 at 16:04

user18558866's user avatar

Basing above suggestions from all, I was using xampp for running cgi scripts.
Windows 8 it worked with out any changes, but Cent7.0 it was throwing errors like this as said above

AH01215: (2)No such file or directory: exec of ‘/opt/lampp/cgi-bin/pbsa_config.cgi’ failed: /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] [client XX:60624] End of script output before headers: pbsa_config.cgi, referer: http://xx/MCB_HTML/TestBed.html

Try:

Disabled selinux

Given full permissions for script, but 755 will be ok

I finaly added like -w like below

#!/usr/bin/perl -w*

use CGI ':standard';
{
       
        print header(),
         ...
         end_html();


}

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

Giacomo1968's user avatar

Giacomo1968

25.4k11 gold badges70 silver badges100 bronze badges

answered Aug 30, 2017 at 9:36

Bhagyaraj's user avatar

I know there are some questions about this topic, but none seems to solve my issue. See this or this or this.

I’m on Linux, Fedora21, and I’m trying to enable per user directory CGI script. I followed these instructions, but without success.

I get the error:

[cgi:error] End of script output before headers: test.cgi

test.cgi is an executable sh file, containing a very simple script:

#!/usr/bin/sh

echo "Content-type: text/plain"
echo ""
echo "Hello"

which has executable flag and runs without problems from shell.
I also tried with Python: same result.

I also disabled selinux for good measure.

I also tried setting the debug level to Apache’s ErrorLog, but all I get is only «granted» permissions before the error above.

I also configured the /etc/httpd/conf.d/userdir.conf file with

<Directory "/home/*/public_html">
    AllowOverride All
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require all granted
</Directory>

<Directory /home/*/public_html/cgi-bin/>
    Options ExecCGI FollowSymLinks
    SetHandler cgi-script
    AddHandler cgi-script .cgi .exe .pl .py .vbs
    Require all granted
    AllowOverride All
</Directory>

and restarted the server. No success. Everything looks fine to me, I can’t understand… What’s wrong??

EDIT:

I forgot to add that the issue is just for per-user directory: if I move the same script to /var/www/cgi-bin directory, it works as expected.

EDIT 2:

The shell does exist:

$ ls /usr/bin/sh
/usr/bin/sh

I am trying to test some mail services such as sendinblue or sendgrid using SMTP connection. I have created a test php file, which uses my sendinblue.com or sendgrid.com credentials to send one email message, and it works fine on my local Windows machine, but when I upload it to the
hosting, it gives the following error on request:
End of script output before headers
Similar script works fine, when I connect to smtp server directly.

<?php
use PHPMailerPHPMailerPHPMailer;

require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';

$mail = new PHPMailer(true);								
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';

//Server settings
$mail->SMTPDebug = 2;									
$mail->isSMTP();										
$mail->Host = 'smtp-relay.sendinblue.com'; 						
$mail->SMTPAuth = true;									
$mail->Username = 'serob45@mail.ru';			//My SendInBlue or SendGrid username		
$mail->Password = '';						
$mail->SMTPSecure = 'tls';							
$mail->Port = '587';	

$mail->setFrom('serob45@mail.ru', 'Serob');
$mail->addAddress('test@gmail.com');
$mail->Subject = 'Test Subject from gmail';
$mail->isHTML(true);
$mail->Body = 'Hello dear Serob';

$success=$mail->send();

 Самыми распространенными ошибками mod_fcgid являются «Premature end of script headers», «can’t lock process table in pid», «can’t apply process slot», «couldn’t bind unix domain socket», «exit(communication error), get unexpected signal 11″…

Причины этих ошибок могут быть разные, от неправильных прав на файлы до неполной загрузки файла на сервер, не правильно написанного скрипта и неправильного режима передачи файла ASCII/Двоичный. Иногда бывает проблема кроется в переводе строк Windows формата, в этом случае может помочь команда col -bx <input_file> output_file (скобки обязательны!) или редактор notepad++ «Конверсия конца строки«.

Но когда mod_fcgid в целом работает нормально, а «Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: …» и «Premature end of script headers: php-fcgi-wrapper, referer: …» продолжают регулярно появляться в error_log, при этом php_errors.log и /var/log/httpd/suexec.log не предоставляет никакой дополнительной информации, то копать нужно глубже — /var/log/messages или /var/log/kernel.log.

Chapter 1. Connection reset by peer: mod_fcgid: error reading data from FastCGI server

[Fri Dec 16 04:30:14.424452 2016] [fcgid:warn] [pid 26593] (104)Connection reset by peer: [client 127.0.0.1:42657] mod_fcgid: error reading data from FastCGI server, referer: http://example.com/install/index.php?restart=true

[Fri Dec 16 04:30:14.424564 2016] [core:error] [pid 26593] [client 127.0.0.1:42657] End of script output before headers: index.php, referer: http://example.com/install/index.php?restart=true

Если увеличение значений в FcgidProcessLifeTime, FcgidIOTimeout, FcgidIdleTimeout, FcgidBusyTimeout, не решает проблему, тогда нужно смотреть, а не используются ли PHP акселераторы типа APC. Например при использовании opcache в PHP 7 установка PrestaShop 1.7 обламывалась с ошибкой «Connection reset by peer: mod_fcgid: error reading data from FastCGI server«, в php.ini была указана директория для дополнительного кеширования байткода «opcache.file_cache=/var/www/.tmp«, но после того, как «;opcache.file_cache=/var/www/.tmp» была закомментирована — проблема исчезла.

Section 1. Причина №1 — неправильные «чмоды»

Основной причиной, как правило, появления этой ошибки может быть нехватка прав/полномочий на выполнение FastCGI скрипта, РНР в нашем случае.

Права на домашний каталог юзера в котором лежат файлы сайта должны быть 0755 и не меньше, а иначе будет «форбайден» (НТТР 403: 13PermissionDenied — Httpd Wiki), на файл же выполняющий обработку (онже FcgidWrapper) CGI скриптов «чмоды» (chmod) как минимум 750.

Если не помогло, смотрим иные варианты…

Section 2. Причина №2 — нахватка системных ресурсов

Например, первые ошибки mod_fcgid мы получили в error_log «Fri Mar 08 13:42:10 2013«:

[Fri Mar 08 13:42:10 2013] [warn] [client 81.83.хх.ххх] (104)Connection reset by

peer: mod_fcgid: error reading data from FastCGI server, referer: ...

[Fri Mar 08 13:42:10 2013] [error] [client 81.83.хх.ххх] Premature end of script

headers: phpfcgiwrapper, referer: ...

Тогда открываем /var/log/messages или /var/log/kernel, находим системные события происходившие в упомянутое выше время вплоть до секунды и смотрим что же там творилось до и после ошибки php-cgi: http://pastebin.com/Gz5ccSNV

Как видим OOM Killer (oom-killer) начал прибивать процессы уже когда памяти совсем не осталось. OOM Killer — это реализация «Out of memory Killer» на уровне ядра Linux.

Виртуальной памяти (swap) в системе может быть немеряно, разумеется в пределах адресации HDD, а вот оперативной (RAM-ы) вполне ограниченное её количество. Бывают ситуации когда «чилды» (форки) процессов системы поедают ее всю (swap + RAM), и тут OOM Killer начинает среди процессов, кроме kernel init и threads, такой, который по его (oom-killer) мнению является самым ущербным (badness) и начинает его убивать.

В примере выше как раз возникла именно такая ситуация, когда «Free swap = 0kB» процессами (их чилдами/форками httpd-олигархов) httpd и php-cgi съедена вся память включая файл подкачки, «Swap is 100% used» и «Memory is 99% used» — обычно в таких ситуациях система уходит в нирвану и прекращает отвечать/реагировать на внешние команды.

Для решения проблемы поедания памяти рекомендуется снизить число чилдов (CHILDREN) апача и PHP, если PHP_FCGI_CHILDREN больше 2. Понизить значение PHP_FCGI_CHILDREN, а в случае использования PHP акселераторов типа APC и т.д. установить PHP_FCGI_CHILDREN = 0 ибо как сказано в секции «Special PHP considerations» официального мана mod_fcgid, чтоPHP акселератор APC не в состоянии расшаривать свой кэш для PHP модуля mod_fcgid если mod_fcgid/PHP использует управление процессами! Про иные акселераторы ничего не сказано, но всё же если используются любые акселераторы, то лучше управление процессами оставить на совести httpd демона.

Второй способ побороть ошибки «Connection reset by peer: mod_fcgid: error reading data from FastCGI server» и «Premature end of script headers: php-fcgi-wrapper» — это не устанавливать слишком высокое значение в PHP_FCGI_MAX_REQUESTS, которое по умолчанию равно = 500. Вместе с этим использовать директиву FcgidMaxRequestsPerProcess, значение которой должно быть <= PHP_FCGI_MAX_REQUESTS — т.е. если PHP_FCGI_MAX_REQUESTS = 1000, то и значение FcgidMaxRequestsPerProcess должно быть = 1000 или меньше, по умолчанию количество запросов отправляемых в php-cgi не контролируется, т.е. FcgidMaxRequestsPerProcess = 0.

В некоторых случаях помогает увеличение РНР лимита в php.ini, в директивах «max_execution_time = 180«, «max_input_time = 120» и «default_socket_timeout = 180«, а также установкой «FcgidIOTimeout 300» и «FcgidBusyTimeout 500» в vi /etc/httpd/conf/httpd.conf или же конфиге виртуального хоста — разумеется под каждые конкретные условия значения подбираются экспериментальным путём.

Следующим шагом будет выбор стратегии выделения памяти (OVERCOMMIT_GUESS (0), OVERCOMMIT_ALWAYS (1), OVERCOMMIT_NEVER (2)) отличной от стратегии по умолчанию. По умолчанию sysctl -w vm.overcommit_memory=0 система пытается оценить объем свободной памяти, а на практике же удовлетворяет все запросы к памяти до момента её полной утечки, после чего вызывает упомянутый выше OOM Killer (oom-killer) уже тогда, когда система ушла в нирвану «Free swap = 0kB», «Swap is 100% used» и «Memory is 99% used».

vm.overcommit_memory=1 почти тоже что и = 0, только теперь уже система не пытается оценивать объем свободной памяти, а делает вид, что её всегда хватает до момента её полной утечки. vm.overcommit_memory=2 запретит выделять больше памяти чем имеется в файле подкачки и больше оперативной памяти в процентном соотношении указанном в параметре vm.overcommit_ratio=?. Также можно вырубить эвристический поиск ущербного процесса для убивания, по умолчанию vm.oom_kill_allocating_task=0 (OOM Killer) сканирует весь список задач и на основе своего эвристического алгоритма выбирает процесс для убивания, что отнимает дополнительные ресурсы системы. Значение выше 0 запрещает сканировать список задач и говорит «OOM Killer-у» уничтожать любой процесс запросивший больше РАМ-ы чем имеется в наличии.

sysctl w vm.overcommit_memory=2

sysctl w vm.overcommit_ratio=90

sysctl w vm.oom_kill_allocating_task=1

Для изменений на постоянной основе добавим в /etc/sysctl.conf. Ещё как вариант можно сделать ещё один файл подкачки, на случай вонючий:)

dd if=/dev/zero of=/root/swap1 bs=1024 count=1024K

1048576+0 records in

1048576+0 records out

1073741824 bytes (1.1 GB) copied, 8.61173 s, 125 MB/s

mkswap /root/swap1

Setting up swapspace version 1, size = 1048572 KiB

no label, UUID=ba18ffdeb25b48449da46fd095c9182f

swapon /root/swap1

vi /etc/fstab

/root/swap1 swap swap defaults 0 0

Chapter 3. mod_fcgid: can’t lock process table in pid

Это сообщение «mod_fcgid: can’t lock process table in pid» (mod_fcgid: не может заблокировать таблицу процессов в pid) может возникать тогда, когда регулярно используется команда «apachectl graceful» — т.е. перезапуск без разрыва текущих соединений, а её выполнение попадает во время интенсивного использования/нагрузки сервера.

Chapter 4. mod_fcgid: can’t apply process slot

«mod_fcgid: can’t apply process slot» — mod_fcgid не может выделить слот для процесса…

Section 1. Причина №1 — проблемы сегментации

В лог файл виртуального хоста получили «[warn] [client 78.159.53.233] mod_fcgid: can’t apply process slot for /var/www/user/php/php-cgi-wrapper, referer: https://www.google.com.ua/«, а в лог файл самого сервера множественные «[crit] (22)Invalid argument: ap_queue_pop failed«.

Ошибкой «Invalid argument: ap_queue_pop failed» в лог файл /var/log/httpd/error_log нагадило мегов на 300 с лишним за какие-то считанные минуты. Этой ошибке предшествовали сообщения «[alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread» и «[notice] child pid 2839 exit signal Segmentation fault (11) Error in my_thread_global_end(): 1 threads didn’t exit«.

На ibm.com рекомендовалось увеличить значение «sysctl -w kernel.threads-max=120000» (по умолчанию 3525 в CentOS 6 и 7877 в CentOS 5) и уменьшить «stack size» с 10240 кб до «ulimit -s 256«.

Размер для каждого потока «thread» равен размеру «stack size», а если Apache запущен как Workerи завышены значения MaxClients, MinSpareThreads, MaxSpareThreads и ThreadsPerChild, в условиях нехватки памяти, то получим «[alert] (11)Resource temporarily unavailable: apr_thread_create: unable to create worker thread Error in my_thread_global_end(): 1 threads didn’t exit»

Можно увеличить kernel.threads-max, но «stack size» лучше оставить как есть, а иначе на некоторых страницах сайта это может вызывать ошибку «exit(communication error), get unexpected signal 11«! Однако принимая во внимание предыдущий абзац, «stack size» можно попробовать урезать в 3-5 раза или же урезать ThreadsPerChild если продолжаем получать «Resource temporarily unavailable: apr_thread_create: unable to create worker thread«.

Установить ограничение для «stack size» на постоянной основе можно в конф. файле /etc/security/limits.conf:

....

*               soft    stack            2048

apache               hard    stack            5120

# End of file

В примере выше мягкий лимит на «stack size» для всех установлен в 2 МБ, а для пользователя apache ограничен жестким лимитом в 5 МБ. После изменения лимитов с помощью «ulimit -s 256» нужно остановить и снова запустить сервер «service httpd stop && service httpd start«, чтобы изменения вступили в силу, изменения в /etc/security/limits.conf вступят в силу после перезагрузки ОС!

Section 2. Причина №2 — проблема конфигурации

…»mod_fcgid: can’t apply process slot» может быть связана не только с ошибками сегментации, но и с другими причинами такими, как например конфигурация самого mod_fcgid. Рядом с ошибкой «mod_fcgid: can’t apply process slot» граничит и «apache https 503» (ака «Service Unavailable»).

Основную погоду делают параметры:

  • FcgidMaxProcesses — максимально допустимое число php-cgi процессов запущенных одновременно;
  • FcgidMaxProcessesPerClass — максимально допустимое число php-cgi процессов для каждого класса.

PerClass-ом в Апаче, имхо … как я понимаю, считается базовый хост и все его виртуальные хосты. Значит, если FcgidMaxProcessesPerClass 2, а виртуальных хостов у нас 15 + 1 базовый хост, то в итоге получаем 32 php-cgi процесса, но если FcgidMaxProcesses (1000 по умолчанию) будет ниже 32, то в итоге в лог можем получить «mod_fcgid: can’t apply process slot», а в браузер «503 Service Unavailable».

В некоторых случаях (зависит от нагрузки) значение FcgidMaxProcessesPerClass должно быть не меньше 3-5.

Chapter 5. exit(communication error), get unexpected signal 11

Эта ошибка результат уменьшения «stack size»:

less /var/log/httpd/error_log

[Sun Nov 03 00:40:30 2013] [error] mod_fcgid: process /var/www/wrs/php/phpcgiw

rapper(2558) exit(communication error), get unexpected signal 11

[Sun Nov 03 00:40:30 2013] [warn] [client xxx.xxx.xxx.xxx] (104)Connection reset by

peer: mod_fcgid: error reading data from FastCGI server, referer: http://example.

com

[Sun Nov 03 00:40:30 2013] [error] [client xxx.xxx.xxx.xxx] Premature end of script

headers: index.php, referer: http://example.com/

less /var/log/messages

Nov  3 00:56:21 samp kernel: phpcgi[2666]: segfault at 7fffe9034f30 ip

00000000004740c3 sp 00007fffe9034ef0 error 6 in phpcgi[400000+341000]

Premature end of script headers / exit(communication error), get unexpected signal 11 в некоторых случаях может возникать из-за PHP акселераторов типа APC, обычно отсутствует если PHP работает «Как модуль APACHE».

Примечательно, что данная ошибка может проявляться только на некоторых страницах, обычно больших по размеру, где, например, может быть много кода раскрашиваемого Geshi плагином. Часто такие страницы создают большую нагрузку на ЦП и превысив всевозможные лимиты вызывают segfault.

Chapter 6. user mismatch (daemon instead of www)

Связанные ошибки:

/home/user/logs/error_log

[Mon Dec 16 12:36:19.011343 2013] [fcgid:warn] [pid 17033:tid 2183892224] [clien

t 178.94.242.15:54550] mod_fcgid: error reading data, FastCGI server closed conn

ection

[Mon Dec 16 12:36:19.016230 2013] [core:error] [pid 17033:tid 2183892224] [clien

t 178.94.242.15:54550] End of script output before headers: writetest.php

logs/error_log

suexec policy violation: see suexec log for more details

logs/suexec_log

[20131216 12:36:19]: user mismatch (daemon instead of www)

Ошибка вызвана несовпадением имени пользователя указанного в директиве AP_HTTPD_USER, имя которого можно узнать выполнив «suexec -V«, с именем пользователя, которое указано в /var/www/conf/httpd.conf.

В данном случае AP_HTTPD_USER для suexec = www, а имя указанное в httpd.conf = daemon. Решение: в конфиге /var/www/conf/httpd.conf, в директивах User и Group указать имя www вместо daemon.

Chapter 7. mod_fcgid: couldn’t bind unix domain socket /var/www/logs/fcgidsock/29944.19

Сопутствующие ошибки:

[Mon Dec 16 12:40:29.310746 2013] [fcgid:warn] [pid 29944:tid 665836768] (13)Per

mission denied: mod_fcgid: spawn process /home/user/php/phpcgiwrapper error

[Mon Dec 16 12:40:30.344063 2013] [fcgid:error] [pid 29944:tid 665836768] (13)Pe

rmission denied: mod_fcgid: couldnt bind unix domain socket /var/www/logs/fcgid

sock/29944.19

Решается сменой прав на каталог «chmod 777 /var/www/logs/fcgidsock/» или же сменой каталога директивой FcgidIPCDir

Если есть ещё какие вопросы по другим ошибкам mod_fcgid, то пишем в комментарии…

Chapter 8. Ссыль по теме:

  • mod_fcgid — Apache HTTP Server
  • Documentation for /proc/sys/vm/*

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:xamppperlbinperl.exe"print "Hello World";

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

15

Решение

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

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

chmod 755 myfile.pl

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

16

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

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

#!"C:xamppperlbinperl.exe"
print "Content-Type: text/htmlnn";
print "Hello World";

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

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

#!"C:xamppperlbinperl.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

Не запускаются скрипты .py под OpenServer, помогите плз.
Итак, установил open_server_5_3_5_ultimate, питон 3.8.2, настроил апач:
AddHandler cgi-script .cgi .pl .py
и
Options -MultiViews +Indexes +FollowSymLinks +IncludesNoExec +Includes +ExecCGI

все остальные параметры по умолчанию.

далее создаю файл: c:openserverOSPaneldomainspim.rutest.py
с содержимым (поменяв окончание строк на UNIX):

#!c:PythonPython38-32python.exe
# -*- coding: utf-8 -*
print ("Content-Type: text/htmlrn")
print ("<html><head><title>And Now for Something Completely Different…</title></head><body>")
print ("<h1> Python  works!</h1>")
print ("<p>Привет, мир!!!</p>")
print ("</body></html>")

далее получаю в браузере:

Ошибка сервера!
Произошла внутренняя ошибка сервера, в результате которой серверу не удалось завершить обработку Вашего запроса.
Error message:
End of script output before headers: test.py
Если Вы считаете, что это ошибка сервера, пожалуйста, сообщите об этом веб-мастеру.
Error 500
pim.ru
Apache

а в логе апача:

[Thu Mar 12 15:03:11.633584 2020] [cgi:error] [pid 2816:tid 1876] [client 127.0.0.1:50459] End of script output before headers: test.py
[Thu Mar 12 15:03:11.633584 2020] [cgi:error] [pid 2816:tid 1876] [client 127.0.0.1:50459] AH01215: C:\Python\Python38-32\python.exe: can't open file '%L': [Errno 2] No such file or directory: C:/openserver/OSPanel/domains/pim.ru/test.py

при это если запускаю из командной строки, то получаю нормальный вывод:

c:PythonPython38-32>python.exe c:openserverOSPaneldomainspim.rutest.py
Content-Type: text/html
<html><head><title>And Now for Something Completely Different…</title></head><body>
<h1> Python  works!</h1>
<p>Привет, мир!!!</p>
</body></html>
c:Python>

в PATH все вроде прописано:

C:Perlsitebin;C:Perlbin;c:PythonPython38-32Scripts;c:PythonPython38-32;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:UsersUserAppDataLocalMicrosoftWindowsApps;

При этом скрипты PERL работают сразу и идеально.

Понравилась статья? Поделить с друзьями:
  • Error message creator download
  • Error message could not find the specified table
  • Error message could not find driver
  • Error message corrupted
  • Error message bomc must be run in a super user mode