2009-09-23 44 views
7

Tôi đang cố chạy một tập lệnh cgi đơn giản sau khi định cấu hình máy chủ của mình.lỗi máy chủ nội bộ (500) bằng mã cgi đơn giản

Kịch bản của tôi trông như thế này:

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

Khi tôi đi đến kịch bản của tôi url http://127.0.0.1/~flybywire/cgi-bin/main.py tôi nhận được:

máy chủ nội bộ Lỗi

Máy chủ gặp phải lỗi nội bộ hoặc sai và không thể hoàn thành yêu cầu của bạn.

Và trong error.log tôi nhận được như sau:

[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

thông tin khác:Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

Trả lời

21

Bạn có thể cần một #!/usr/bin/python ở phía trên cùng của kịch bản của bạn để cho Apache để sử dụng Python để Thực hiện nó. Ít nhất, tôi đã làm điều đó và nó đã làm việc cho tôi :-).

+0

cảm ơn bạn, nó hoạt động. – flybywire

+0

Tôi nghĩ rằng thêm '#!/Usr/bin/python' vào tất cả các script cgi là đáng sợ. Làm thế nào để thiết lập nó bằng apache SetEnv PYTHONPATH? – gonjay

0

Dường như Apache gặp sự cố khi thực thi nó. Thông thường đối với một tập lệnh Unix, bạn cũng cần chỉ định trình thông dịch ở đầu tập lệnh.

Hãy thử thêm này lên trên cùng:

#!/usr/bin/python 
9

Ngoài ra, lưu tập tin (nếu điều này là một máy chủ Linux) với kết thúc dòng Unix. Bạn đã làm cho nó thực thi bằng cách sử dụng chmod +x phải không?

Bạn có thể sử dụng #!/usr/bin/env python để bao gồm phiên bản Python đang chạy hiện tại nếu bạn đang chạy trong các môi trường khác nhau (do đó phần env).

+0

Khi tôi thử nó mà không có 'chmod + x' có một lỗi khác:' (13) Quyền bị từ chối: exec của '/home/flybywire/www/cgi-bin/main.py' failed'. –

+1

Đó đơn giản là vì chmod + x làm cho các tập tin cho phép thực thi - làm cho tập tin thực thi là một điều kiện tiên quyết, thực sự. –

1

Đưa

#!/usr/bin/env python 

trên đỉnh của kịch bản hoạt động tốt. Tôi đặt nó trên đầu trang, nhưng Netbeans đã đặt thêm mã (lệnh nhập) bằng cách riêng của mình trên đỉnh của trang mà lái xe cho tôi điên :(

0

Có lẽ vấn đề của bạn rằng phiên bản python mới cần dấu ngoặc đơn().

Vì vậy bạn:

print "<body>" 

Bây giờ nên là:

print ("<body>") 
+0

Họ đang sử dụng Python2 không Python3. –

0

loại bỏ dòng thứ 2 trong chương trình của bạn (bản in) tôi đã cố gắng nó trên máy chủ apache của tôi (mac os x) nó hoạt động tốt. đừng quên chmod 755 và khởi động lại với sudo apachectl khởi động lại này là dành cho python 2,7

print "Content-type: text/html" 
print "<html><head><title>CGI</title></head>" 
print "<body>" 
print "hello cgi" 
print "</body>" 
print "</html>" 
Các vấn đề liên quan