【发布时间】:2009-06-03 03:50:41
【问题描述】:
我正在用 C# 编写一个 Web 服务器,并且正在尝试添加对 PHP 的支持。我让它大部分工作,除了当我将文件传递给它时,我不知道如何将 GET 和 POST 数据传递给 PHP 可执行文件。我一直在使用 GET 进行测试,因为我还没有在服务器上处理 POST 请求,并且我将传递的参数字符串分开,但我不知道如何将信息提供给 php 解析器.一些提示将不胜感激。
【问题讨论】:
我正在用 C# 编写一个 Web 服务器,并且正在尝试添加对 PHP 的支持。我让它大部分工作,除了当我将文件传递给它时,我不知道如何将 GET 和 POST 数据传递给 PHP 可执行文件。我一直在使用 GET 进行测试,因为我还没有在服务器上处理 POST 请求,并且我将传递的参数字符串分开,但我不知道如何将信息提供给 php 解析器.一些提示将不胜感激。
【问题讨论】:
对于 GET: 简单的方法(我发现):
php-cgi.exe <script-file-name> <parameter1>=<value1> <parameter2>=<value2> [...] <parameterN>=<valueN>
更难的方式(通过 php-cgi 和 windows cli)是:
SET "QUERY_STRING=<parameter1>=<value1>&<parameter2>=<value2>&[...]&<paramterN>=<valueN>"
SET SCRIPT_NAME=<script-file-name>
SET REQUEST_METHOD=GET
SET REDIRECT_STATUS=0
php-cgi.exe
我假设有一种方法可以通过 C#/.Net 设置环境变量。 php-cgi.exe 完成后必须取消设置环境变量。
您可以在http://www.ietf.org/rfc/rfc3875.txt 设置(以及一般的 CGI)CGI 环境变量的更多信息。 PHP 的 $_SERVER 变量文档也可能有用。将 PHP 作为 CGI 运行的安全注意事项也在 php.net 的 PHP 文档中。
【讨论】:
你熟悉CGI吗?这通常是 Web 服务器执行任意外部程序的方式。
当然有更现代的 CGI 替代方案,但(几乎)今天的每个 Web 服务器和外部程序都将支持 CGI。
【讨论】:
如果您在 bash 或类似的 shell 中,试试这个:QUERY_STRING="fruitKind=apple&basketId=1000" php -q foo.php。
【讨论】:
您是否考虑过将 GET/POST 数据作为 STDIN 传送到 PHP 可执行文件?即
system("echo ".GETOrPOSTData." > foobar.php");
【讨论】: