我正在开发一个调用PHP二进制文件(通过CGI)来处理脚本的网络服务器。如何将查询字符串参数传递给PHP二进制文件?
这里的问题:
的PHP脚本不捡的命令行参数。例如,如果客户端请求path/to/file.php?test=value
,则$_GET
数组为空。
我曾尝试在环境变量(QUERY_STRING
)中传递参数,但它们仍然不显示。
如何将查询字符串参数传递给PHP应用程序?
我正在开发一个调用PHP二进制文件(通过CGI)来处理脚本的网络服务器。如何将查询字符串参数传递给PHP二进制文件?
这里的问题:
的PHP脚本不捡的命令行参数。例如,如果客户端请求path/to/file.php?test=value
,则$_GET
数组为空。
我曾尝试在环境变量(QUERY_STRING
)中传递参数,但它们仍然不显示。
如何将查询字符串参数传递给PHP应用程序?
有PHP的各种SAPIs。其中之一是cli SAPI,显然是你正在使用的,cli SAPI不会填充$ _GET,$ _POST ...因为它是用于命令行脚本的。
你的情况你需要PHP cgi SAPI。 (例如,你需要更换php
php-cgi
[1]在您的家当)
[1]在大多数distribuitons它被称为php-cgi
,如果你自己,你需要启用CGI编译PHP。
你说的是命令行参数或$ _GET参数?那些不一样。
使用网页浏览器时,使用$_GET
。但是,如果您传递的命令行参数为/path/to/file.php arg1 arg2
,那么您必须使用(并且$argc
包含元素的长度)。
$argv[0]
总是包含正在运行的文件,在本例中为/path/to/file.php
。
$argv[1]
是arg1
在这种情况下和$argv[2]
是arg2
。所以$argc
包含3
有用的资源:
如Don’t call me DOM » Testing CGI scripts with QUERY_STRING, in 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:如果你有一个Web服务器 -
如果PHP文件是在命令行中,你可以使用 'wget的' web服务器上:
wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
OR:
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"];
啊,这就是了。谢谢! – 2010-10-03 07:25:17
当你没有php-cgi但想模拟在cgi环境下调用php时,你会做什么? – ericslaw 2011-06-23 19:11:26
要拼出来,你可以运行'php-cgi file.php a = 1 b = 2'。 – ijt 2017-03-21 01:12:38