首先,我是一名法国学生,请原谅我的英语不好 水平。
我们目前正在开发一个Web服务器(C ++),我必须开发CGI执行 部分,更确切地说:PHP CGI部分。
当用户在我们的服务器上询问.php页面时,我们fork / pipe并调用/ usr / bin / php 翻译。例如:
$ / usr / bin / php index.php
现在,我们可以将结果保存在缓冲区(生成的index.php的html代码)中,我可以发送 这个内容给了客户。它适用于没有任何变量的简单脚本。
但是,很多php脚本都使用了一些超级全局,比如$ _GET和$ _POST。 我的问题是:我如何向php解释器提供这个论点?
示例:如何设置此$ _POST变量以保存“Hello world” 我们的缓冲区?
<?php
echo $_POST['text'];
?>
感谢您将来的回复。
亲切
答案 0 :(得分:4)
CGI程序期望stdin
上的POST数据。和QUERY_STRING
环境变量中的GET数据。
答案 1 :(得分:3)
您必须设置一些环境变量:
REQUEST_METHOD=POST
告诉PHP它需要处理POST请求CONTENT_LENGTH=1234
告诉PHP它将接收多少字节作为原始POST数据(在本例中为1234字节)HTTP_CONTENT_LENGTH
与CONTENT_LENGTH
基本相同。更好地设置它,以便它可以更好地使用各种PHP版本/配置。CONTENT_TYPE=application/x-www-form-urlencoded
是HTTP Content-Type标头您可以从HTTP标头中获取这些变量的正确值。
您还需要一个到PHP进程的双向管道,以将原始POST数据发送到它的STDIN。我假设您已经从PHP接收脚本输出。
只要您处理正常的浏览器请求,您就不需要了解更多详细信息。否则,如果POST数据直接来自您的服务器,请使用上面的CONTENT_TYPE并对变量进行url编码:
REQUEST_METHOD=POST
CONTENT_LENGTH=16
HTTP_CONTENT_LENGTH=16
CONTENT_TYPE=application/x-www-form-urlencoded
STDIN数据:
test=Hello+world
对于GET请求,您更改REQUEST_METHOD=GET
并忽略其他变量。在任何一种情况下,您都可以通过QUERY_STRING
环境变量传递查询字符串。