首页 > 解决方案 > 当 $_SERVER['QUERY_STRING'] 包含 'a=foo' 时,为什么不会填充 $_GET['a']?

问题描述

使用这个 php 脚本,通过 nginx 下的 fastcgi 调用。不使用特定于 php 的 fastcgi 模块,只是像任何其他 unix 可执行文件一样调用它:

#!/usr/bin/php
<?php
echo "HTTP/1.1 200 OK\r\n\r\n";
echo 'Hello world'; echo "\n";
echo $_GET['a']; echo "\n";
echo $_SERVER['QUERY_STRING']; echo "\n";
echo $_SERVER['REQUEST_URI'];
echo "\n_GET\n";
while (list($var,$value) = each ($_GET)) {
    echo "$var => $value <br />\n";
}
?>

api/example该脚本在文档根目录下调用。我发送这个请求:

GET /api/example?a=foo HTTP/1.1

并得到这个回应:

Hello world

a=foo
/api/example?a=foo
_GET

IE。php 已按预期进行初始化$_SERVER['QUERY_STRING']——$_SERVER['REQUEST_URI']这表明参数正在通过 nginx/fastcgi 层传递——但$_GET['a']仍未初始化,实际上$_GET关联数组完全为空?为什么?

我正在运行 PHP 5.3.29。我将request_orderphp.ini 调整为ESGP(从默认值GP)以尝试修复此问题,但我认为这无关紧要——除此之外,它是一个标准配置。

标签: phpnginxfastcgi

解决方案


Get 用于 http 样式的请求,这看起来是作为 cli 运行的。如果要使用 cli 传递参数,请查看 $argv


推荐阅读