繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM