2009-09-23 7 views
7

J'essaie d'exécuter un script cgi simple après avoir configuré mon serveur.erreur de serveur interne (500) dans un script cgi simple

Mon script ressemble à ceci:

print "Content-type: text/html" 
print 
print "<html><head><title>CGI</title></head>" 
print "<body>" 
print "hello cgi" 
print "</body>" 
print "</html>" 

Quand je vais à mes scripts URL http://127.0.0.1/~flybywire/cgi-bin/main.py je reçois:

Erreur serveur interne

Le serveur a rencontré une erreur interne ou une mauvaise configuration et n'a pas pu compléter votre demande.

Et error.log je reçois le texte suivant:

[error] (8)Exec format error: exec of '/home/flybywire/www/cgi-bin/main.py' failed [error] [client 127.0.0.1] Premature end of script headers: main.py

Autres infos:Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

Répondre

21

Vous pourriez avoir besoin d'une #!/usr/bin/python en haut de votre script pour dire Apache à utiliser Python l'exécuter. Au moins, je l'ai fait et cela a fonctionné pour moi :-).

+0

merci, cela fonctionne. – flybywire

+0

Je pense qu'ajouter '#!/Usr/bin/python' à tout script cgi est effrayant. Comment le régler par apache SetEnv PYTHONPATH? – gonjay

0

Apparemment, Apache a du mal à l'exécuter. Généralement, pour un script Unix, vous devez également spécifier l'interpréteur en haut du script.

Essayez d'ajouter ceci au top:

#!/usr/bin/python 
9

Aussi, enregistrez le fichier (si cela est un serveur Linux) avec des fins de ligne Unix. Vous l'avez rendu exécutable en utilisant chmod +x n'est-ce pas?

Vous pouvez utiliser #!/usr/bin/env python pour couvrir la version actuelle de Python si vous utilisez différents environnements (d'où la partie env).

+0

Lorsque je l'ai essayé sans 'chmod + x' il y avait une erreur différente:' (13) Permission refusée: exec de '/home/flybywire/www/cgi-bin/main.py' failed'. –

+1

C'est tout simplement parce que chmod + x rend les permissions de fichiers exécutables - en fait, le fichier exécutable est une condition préalable. –

1

Mettre

#!/usr/bin/env python 

sur le haut du script fonctionne très bien. Je l'ai mis sur le dessus, mais Netbeans mettais du code supplémentaire (commandes d'importation) par lui-même sur le haut de la page qui me rendait fou :(

0

Peut-être que votre problème est que la nouvelle version python a besoin entre parenthèses().

Alors votre:

print "<body>" 

maintenant devrait être:

print ("<body>") 
+0

Ils utilisent Python2 pas Python3. –

0

retirer la 2ème ligne dans votre programme (impression) Je l'ai essayé sur mon serveur apache (mac os x) ça marche bien. n'oubliez pas de chmod 755 et redémarrer avec sudo apachectl redémarrer Ceci est pour python 2,7

print "Content-type: text/html" 
print "<html><head><title>CGI</title></head>" 
print "<body>" 
print "hello cgi" 
print "</body>" 
print "</html>"