[英]How to pass query string parameters to the PHP binary?
我正在开发一个调用 PHP 二进制文件(通过 CGI)来处理脚本的网络服务器。
这是问题所在:
PHP 脚本没有选择命令行参数。 例如,如果客户端请求path/to/file.php?test=value
,则$_GET
数组为空。
我曾尝试在环境变量 ( QUERY_STRING
) 中传递参数,但它们仍然没有出现。
如何将查询字符串参数传递给 PHP 应用程序?
你说的是命令行参数还是$_GET参数? 那些不一样。
使用网络浏览器时,使用$_GET
。 但是如果你传递命令行参数,比如/path/to/file.php arg1 arg2
,那么你必须使用$argv
(并且$argc
包含元素的长度)。
$argv[0]
始终包含正在运行的文件,在本例中为/path/to/file.php
。
在这种情况下, $argv[1]
是arg1
, $argv[2]
是arg2
。 所以$argc
包含 3。
有用的资源:
PHP 有多种 SAPI。 其中之一是 cli SAPI,这显然是您正在使用的,cli SAPI 不会填充 $_GET、$_POST ... 因为它用于命令行脚本。
在您的情况下,您需要 PHP cgi SAPI。 (例如,你需要在你的shebang中用php-cgi
[1]替换php
)
[1] 在大多数发行版中,它被称为php-cgi
,如果您自己编译 PHP,则需要启用 cgi。
正如在不要叫我 DOM » 使用 QUERY_STRING 测试 CGI 脚本中提到的,在 PHP 中,您可能必须使用parse_str
来解析通过 cli 模式传递的环境变量 - Linux 终端中的示例:
$ QUERY_STRING="aa=bb&cc=dd" php -r 'parse_str(getenv("QUERY_STRING"),$_GET); print_r($_GET);'
Array
(
[aa] => bb
[cc] => dd
)
-- 选项 1: php-cgi --
使用 'php-cgi' 代替 'php' 来运行您的脚本。 这是最简单的方法,因为您无需专门修改 PHP 代码即可使用它:
php-cgi -f /my/script/file.php a=1 b=2 c=3
-- 选项 2:如果您有网络服务器 --
如果 php 文件在 Web 服务器上,您可以在命令行上使用“wget”:
wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
或:
wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"
-- 在 php 中访问变量 --
在选项 1 和 2 中,您可以像这样访问这些参数:
$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.