我正在尝试创建一个提供 PHP 脚本的 Web 服务器。目前,它的工作原理如下:
- 客户端请求/index.php?test=value
- 服务器调用
php index.php
- 服务器将 HTTP 请求标头作为 STDIN 提供给 PHP 进程
- 服务器从 STDOUT 读取输出
php
并将其返回给客户端
除了参数没有传递给 PHP 脚本之外,所有这些都有效,因为:
var_dump($_GET);
返回:
数组(0){ }
$_GET
当调用 PHP 二进制文件时,参数如何传递?
答案1
你使用的是哪个 PHP 二进制文件?CLI 还是 CGI?我怀疑你需要一个CGI 版本如果您传递了二进制文件,PHP 可以正确处理环境变量和 POST 数据。
二进制php-cgi
文件实现了 CGI 接口,允许您在命令行上传递参数:
php-cgi -f index.php left=1058 right=1067 class=A language=English
最终结果如下$_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
你可能想了解如何电脑生成图像处理可以工作,因此您可以在自己的 Web 服务器中实现它。
参考:RFC3875
答案2
根据维基百科,答案是设置QUERY_STRING
环境变量:
QUERY_STRING='user=foo&pass=bar&left=1234' php-cgi index.php
或分步进行:
export QUERY_STRING='user=foo&pass=bar&left=1234'
php-cgi index.php
如果您使用该php-cgi
命令,这将有效,因为这是 CGI 规范的一部分。普通php
命令会忽略此变量,但您的脚本可能会使用它。
答案3
如果你通过 php script.php test=asdf
$result = parse_args($argv,$argc,$help);
print_r($result);
如果您将其传递给 STDIN,则需要读取 STDIN 并自行解析标头。REQUEST_URI 将包含您需要的数据,您可以传递它。