如何通过命令行将 $_GET 变量传递给 PHP 脚本?

如何通过命令行将 $_GET 变量传递给 PHP 脚本?

我正在尝试创建一个提供 PHP 脚本的 Web 服务器。目前,它的工作原理如下:

  1. 客户端请求/index.php?test=value
  2. 服务器调用php index.php
  3. 服务器将 HTTP 请求标头作为 STDIN 提供给 PHP 进程
  4. 服务器从 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 将包含您需要的数据,您可以传递它。

相关内容