简单的CGI Python网络服务器 + PHP不起作用

3 投票
2 回答
3954 浏览
提问于 2025-04-16 21:33

现在在其他地方也有人问过类似的问题。不过,我试过那里的建议解决方案,但并没有帮助。

我正在运行以下的 Python CGI 网络服务器:

#!/usr/bin/python
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
serve = HTTPServer(("",80),CGIHTTPRequestHandler)
serve.serve_forever()

在 "cgi-bin" 目录下,有一个名为 "simple.php" 的 PHP 文件:

 #!/usr/bin/php
 <html>
 <head>
 <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?> 
 </body>
 </html>

这个文件已经被设置为可执行权限,并且在服务器的命令行中可以正常执行。

现在,如果我启动服务器并尝试通过 "http://server/cgi-bin/simple.php" 访问这个页面,我只看到一个空白页面,而且在服务器的输出中没有任何错误信息。

我查看了 CGIHTTPServer.py 的代码,我觉得问题可能出现在执行 cgi-bin 时进程被分叉,然后文件描述符(输入、输出)通过 dup2 被操作。不过,我不知道该怎么让它正常工作。这个简单的问题让我困扰了几个小时,非常希望能得到任何帮助。

服务器的操作系统是 Ubuntu 9.04。

2 个回答

0

使用方法:

handler.cgi_directories.append('/')

否则,你的cgi脚本只会在'/cgi-bin'或'/htbin'文件夹中执行,具体可以参考这里。简单来说,cgi_directories就是指从这个文件夹及其所有子文件夹中执行cgi脚本。希望这能帮到你。

3

#!/usr/bin/php 这行代码并不是让你的脚本以CGI的方式运行,而是让它作为命令行脚本运行。如果你手头有一个 php-cgi 的可执行文件,可以用那个;否则,你可能需要在脚本里做一些麻烦的修改,比如:

#!/usr/bin/php
Content-Type: text/html

<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello World</p>'; ?> 
</body>
</html>

撰写回答