web-dev-qa-db-fra.com

Erreur "Fin de la sortie du script avant les en-têtes" dans Apache

Apache sous Windows me donne l'erreur suivante lorsque j'essaie d'accéder à mon script 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'est mon exemple de script

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

mais ne fonctionne pas sur le navigateur

15
user3367242

Vérifiez les autorisations de fichiers.

J'ai eu exactement la même erreur sur une machine Linux avec le jeu d'autorisations incorrect.

chmod 755 myfile.pl

résolu le problème.

16
Renning

S'il s'agit d'un script CGI pour le Web, vous devez générer votre en-tête:

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

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

Le message d'erreur suivant vous indique ceci End of script output before headers: sample.pl

Ou encore mieux, utilisez le module CGI pour afficher l'en-tête:

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

use strict;
use warnings;

use CGI;

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

Pour référence future: 

Il s’agit généralement d’une erreur qui se produit lorsque vous ne pouvez pas afficher ou exécuter le fichier. La raison en est généralement une erreur liée aux autorisations. Je commencerais par suivre la suggestion de @Renning et exécuter chmod 755 test.cgi (remplacez évidemment test.cgi par le nom de votre script cgi ici).

Si cela ne fonctionne pas, vous pouvez essayer quelques autres solutions. Une fois, j'ai eu cette erreur lorsque j'ai créé test.cgi en tant que root dans la maison d'un autre utilisateur. Le correctif à exécuter consistait à exécuter chmod user:user test.cgi où utilisateur est le nom de l'utilisateur qui est chez vous.

La dernière chose à laquelle je peux penser est de vous assurer que votre script cgi renvoie les en-têtes appropriés. Dans mon script Ruby, je l’ai fait en mettant puts "Content-type: text/html" avant d’afficher quoi que ce soit sur la page.

Bonne codage!

6
watzon

C'est probablement un bloc SELinux. Essaye ça:

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

Avait la même erreur sur framboise-pi. Je l'ai corrigé en ajoutant -w au Shebang

#!/usr/bin/Perl -w
4
Carter Brown

Si vous utilisez Suexec, assurez-vous que le script et son répertoire appartiennent au même utilisateur que celui spécifié dans suexec. 

De plus, assurez-vous que l'utilisateur qui exécute le script cgi dispose des autorisations nécessaires pour exécuter les autorisations sur le fichier ET le programme spécifié dans Shebang. 

Par exemple, si mon script cgi commence par 

#! /usr/bin/cgirunner

Ensuite, l'utilisateur a besoin d'autorisations pour exécuter/usr/bin/cgirunner.

2
Despertar

Donc pour tous ceux qui débutent avec XAMPP cgi

changer l'extension de pl en cgi
changer les autorisations à 755

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

Cela a aussi corrigé le mien.

2
crustycollins

L'erreur interne est due à un caractère caché à la fin de la ligne Shebang !! C'est-à-dire la ligne #!/usr/bin/Perl 

En ajoutant - ou -w à la fin, le personnage est éloigné de "Perl", ce qui permet de trouver le chemin du processeur Perl et d'exécuter le script. 

Le caractère caché est créé par l'éditeur utilisé pour créer le script 

1
Tony Goertz

En me basant sur les suggestions de tous, j’utilisais xampp pour exécuter des scripts cgi . Windows 8 fonctionnait sans modifications, mais Cent7.0 jetait des erreurs comme celle-ci, comme indiqué ci-dessus. 

AH01215: (2) Aucun fichier ou répertoire de ce type: l'exécutable de '/opt/lampp/cgi-bin/pbsa_config.cgi' a échoué: /opt/lampp/cgi-bin/pbsa_config.cgi, référant: http: // <> /MCB_HTML/TestBed.html

[Mer. Août 30 09: 11: 03.796584 2017] [cgi: erreur] [pid 32051] [client XX: 60624] Fin de la sortie du script avant les en-têtes: pbsa_config.cgi, referer: http: // xx/MCB_HTML/TestBed .html

Essayer:

Selinux désactivé

Compte tenu des autorisations complètes pour le script, mais 755 sera ok

J'ai finalement ajouté comme -w comme ci-dessous 

#!/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
Bhagyaraj

Vous obtiendrez peut-être cette erreur si vous exécutez des fichiers CGI hors d'un répertoire de départ à l'aide du mod_userdir d'Apache et que le répertoire public_html de l'utilisateur n'appartient pas au groupe appartenant au GID principal de cet utilisateur.

Je n’ai trouvé aucune documentation à ce sujet, mais c’est la solution que j’ai trébuché sur certains scripts CGI défaillants. Je sais que ça a l'air vraiment bizarre (ça n'a aucun sens pour moi non plus), mais ça a fonctionné pour moi, donc j'espère que cela sera utile à quelqu'un d'autre aussi.

0
jayhendren