所以我在写一个web服务器(我知道,世界需要另一个服务器!)我想通过CGI调用php。我有一个运行良好的CGI1.1实现,可以运行perl cgi脚本。
现在我想运行php。但是,当我的cgi模块调用php程序时,它会返回404。
我该怎么做呢?
详情如下:
我使用php5运行在ubuntu上。在我的web服务器中,我将cgi请求传递给一个处理程序,它将找到程序并使用sc ript作为参数调用它。下面是生成cgi进程的代码:
chdir( dir );
execve( argv[0], argv.data(), (char* const*) req.posixEnv() );我正在运行的命令相当于:
/usr/bin/php5-cgi /home/rafael/webserver/data/cgi-bin/test.php这意味着我已经将"dir“设置为:
/home/rafael/webserver/data/cgi-bincgi进程应该在该目录中运行。Argv是"/usr/bin/php5-cgi",argv.data()返回带以下元素的空终止数组:
/usr/bin/php5-cgi
/home/rafael/webserver/data/cgi-bin/test.php
NULLprocess环境包含CGI环境,其中包含一个通常CGI环境变量的块。
当我从一个shell运行上面的命令时,也就是说,通过在shell中输入它,脚本会很好地运行,而php生成测试页面。当我从CGI调用它时,它返回:
Status: 404 Not Found
X-Powered-By: PHP/5.3.10-1ubuntu3.2
Content-type: text/html
No input file specified.现在我或多或少知道发生了什么。PHP正在检测它是否在CLI或CGI模式下运行,并在每种模式下搜索以不同方式运行的脚本。在CGI模式下,可能使用CGI环境变量(如SCRIPT_FILENAME和DOCUMENT_ROOT )解析脚本名。我已经尝试了很多东西--这些变量的不同设置。但这些都不管用。
我所知道的是: PHP的整个生成和读取输出都是有效的。例如,如果我删除某些CGI变量,使它认为它在CLI模式下运行,那么它就能很好地工作--生成页面和所有内容。
我需要知道的是:
我能找到的所有文档都是关于在特定的web服务器上为cgi配置php的。我需要从编写服务器的人的角度来了解这一点。
@编辑:我有一个简单的示例,它消除了c++。我很肯定那部分工作正常。假设我创建了一个调用php的脚本,并试图在shell中模拟cgi调用约定。
这样做是可行的:
#export GATEWAY_INTERFACE="CGI/1.1"
export REDIRECT_STATUS=200
export SERVER_PROTOCOL="HTTP/1.1"
export DOCUMENT_ROOT="/home/rafael/web"
#export SCRIPT_FILENAME="cgi-bin/test.php"
export SCRIPT_NAME="cgi-bin/test.php"
/usr/bin/php5-cgi test.php但这并不是:
export GATEWAY_INTERFACE="CGI/1.1"
export REDIRECT_STATUS=200
export SERVER_PROTOCOL="HTTP/1.1"
export DOCUMENT_ROOT="/home/rafael/web"
#export SCRIPT_FILENAME="cgi-bin/test.php"
export SCRIPT_NAME="cgi-bin/test.php"
/usr/bin/php5-cgi test.php我认为DOCUMENT_ROOT、SCRIPT_FILENAME和SCRIPT_NAME的某些组合可能是可行的。
发布于 2012-07-19 12:55:31
把事情搞砸的是在php.ini中设置“php.ini”。我把它拆开了:
doc_root =现在cgi环境变量更像CGI规范所说的那样工作。例如:下面的事情现在起作用了:
export GATEWAY_INTERFACE="CGI/1.1"
export SERVER_PROTOCOL="HTTP/1.1"
export SCRIPT_FILENAME="/home/rafael/web/cgi-bin/test.php"
export SCRIPT_NAME="test.php"
export REDIRECT_STATUS="200"
/usr/bin/php5-cgi test.phphttps://stackoverflow.com/questions/11498031
复制相似问题