2009-09-23 111 views
7

我想配置我的服務器後運行一個簡單的CGI腳本。簡單的CGI腳本內部服務器錯誤(500)

我的劇本是這樣的:

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

當我去我的腳本URL http://127.0.0.1/~flybywire/cgi-bin/main.py我得到:

內部服務器錯誤

服務器遇到一個內部錯誤或配置錯誤並無法完成您的請求。

而在error.log我得到如下:

[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

其他信息:Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

回答

21

您可能需要一個#!/usr/bin/python在你的腳本的頂部告知Apache使用Python執行它。至少,我這樣做,它對我有用:-)。

+0

謝謝你,它的工作原理。 – flybywire

+0

我想給所有的cgi腳本添加'#!/ usr/bin/python'是很可怕的。如何通過apache SetEnv設置PYTHONPATH? – gonjay

0

看起來Apache很難執行它。通常,對於unix腳本,您還需要在腳本的頂部指定解釋器。

嘗試增加這個要頂:

#!/usr/bin/python 
9

另外,保存文件(如果這是一個Linux服務器)Unix行結尾。你確實使用chmod +x來執行它,不是嗎?

如果您在各種環境中運行(因此env部分),您可以使用#!/usr/bin/env python覆蓋當前運行的Python版本。

+0

當我在沒有'chmod + x'的情況下嘗試時,出現了另一個錯誤:'(13)權限被拒絕:'/home/flybywire/www/cgi-bin/main.py'的失敗'失敗。 –

+1

這僅僅是因爲chmod + x使得文件權限可執行 - 使得文件可執行是真正的先決條件。 –

1

#!/usr/bin/env python 

在腳本的頂部工作正常。我把它放在上面,但Netbeans的是在頁面的頂部這讓我抓狂:(

0

也許你的問題是,新的Python版本需要括號()把額外的代碼(輸入命令)本身。

所以你:

print "<body>" 

現在應該是:

print ("<body>") 
+0

他們正在使用Python2而不是Python3。 –

0

刪除二號線在你的程序(打印) 我嘗試了我的Apache服務器上(MAC操作系統x)它工作正常。 不要忘記命令chmod 755和使用sudo重啓的apachectl重新啓動 這是蟒蛇2.7

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