如何将查询字符串参数传递给PHP二进制文件?

时间:2010-10-03 06:57:32

标签: php http parameters cgi query-string

我正在开发一个Web服务器,它调用PHP二进制文件(通过CGI)来处理脚本。

问题在于:

PHP脚本没有获取命令行参数。例如,如果客户端请求path/to/file.php?test=value,则$_GET数组为空。

我尝试在环境变量(QUERY_STRING)中传递参数,但它们仍未显示。

如何将查询字符串参数传递给PHP应用程序?

4 个答案:

答案 0 :(得分:4)

您是在谈论命令行参数还是 $ _ GET 参数?那些不一样。

使用网络浏览器时,使用$_GET。但是,如果您传递的命令行参数如/path/to/file.php arg1 arg2,那么您必须使用$argv(并且$argc包含元素的长度。)

$argv[0]始终包含正在运行的文件,在此示例中为/path/to/file.php 在这种情况下,$argv[1]arg1$argv[2]arg2。所以$argc包含3。

有用的资源:

答案 1 :(得分:4)

PHP有各种SAPI。其中一个是cli SAPI,显然你正在使用它,cli SAPI不会填充$ _GET,$ _POST ...因为它是用于命令行脚本。

在您的情况下,您需要PHP cgi SAPI。 (例如,您需要在shebang中将php替换为php-cgi [1]

[1]在大多数发行版中,它被称为php-cgi,如果您自己编译PHP,则需要启用cgi。

答案 2 :(得分: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
)

答案 3 :(得分:1)

- 选项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"];