PHP解释器和超级全局

时间:2011-04-11 11:50:02

标签: php arguments superglobals

首先,我是一名法国学生,请原谅我的英语不好 水平。

我们目前正在开发一个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'];

?>

感谢您将来的回复。

亲切

2 个答案:

答案 0 :(得分:4)

CGI程序期望stdin上的POST数据。和QUERY_STRING环境变量中的GET数据。

答案 1 :(得分:3)

您必须设置一些环境变量:

  • REQUEST_METHOD=POST告诉PHP它需要处理POST请求
  • CONTENT_LENGTH=1234告诉PHP它将接收多少字节作为原始POST数据(在本例中为1234字节)
  • HTTP_CONTENT_LENGTHCONTENT_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环境变量传递查询字符串。