为什么 PHP $_REQUEST 数组为空?

为什么 PHP $_REQUEST 数组为空?

我在 Ubuntu Hardy 上安装了 nginx,并立即意识到 PHP 脚本正在获取空的请求数组,即无论是 GET 还是 POST 都没有任何内容通过,甚至 $_REQUEST 数组也是空的。

当我切换回 Apache 时一切都正常。

安装nginx版本为0.6.35-0ubuntu1.1~hardy1,PHP为PHP版本5.2.4-2ubuntu5.10。

可能出了什么问题?

答案1

检查您的 fastcgi 模块的“位置”部分是否进行了此项设置。

 fastcgi_param  QUERY_STRING     $query_string;

http://wiki.nginx.org/NginxHttpFcgiModule

答案2

try_files commandnginx的一个特性是query_string不会自动传递给重写文件,而是必须显式传递。由于它_$SERVER['QUERY_STRING']始终为空,因此变量$_REQUEST$_GET也未设置。

来自Nginx 文档:

与重写不同,如果 fallback 不是命名位置,则不会自动保留 $args。如果需要保留 args,则必须明确执行此操作:

try_files $uri $uri/ /index.php?q=$uri&$args;

或者只使用参数

try_files $uri $uri/ /index.php?$args;

如果您想保证获得原始参数,那么使用与只读$query_string相同的参数。$args$query_string

答案3

尝试检查变量顺序在 nginx 使用的 php 配置文件中。

答案4

如果 Apache 有以下情况,则可能会发生这种情况LimitRequestBody(请参阅)或SecRequestBodyLimit(见mod_security) 设置并且请求体大于该限制。

相关内容