前言
在平时的开发中,我们可能会遇到以下问题:
- 通过 $_REQUEST 得到值怎么和与 $_GET 获取到的不同?
- $_SERVER 的值怎么是空的?
- 能通过 $_REQUEST 获取到 cookie 值吗?
要想回答这几个问题,我们就需要详细了解一下 $_REQUEST 。
PHP 相关配置
首先来看看 PHP 配置文件 php.ini 中的相关配置:
; This directive determines which super global arrays are registered when PHP
; starts up. G,P,C,E & S are abbreviations for the following respective super
; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty
; paid for the registration of these arrays and because ENV is not as commonly
; used as the others, ENV is not recommended on productions servers. You
; can still get access to the environment variables through getenv() should you
; need to.
; Default Value: "EGPCS"
; Development Value: "GPCS"
; Production Value: "GPCS";
; http://php.net/variables-order
variables_order = "GPCS"
variables_order:这个配置项设置在 PHP 脚本启动时,要注册 EGPCS ($_ENV, $_GET,$_POST,$COOKIE,$_SERVER) 中哪几个超全局变量。
例如,如果设置 variables_order = "SP"
,那么 PHP 将创建超全局变量 $_SERVER 和 $_POST,但是不会创建 $_ENV, $_GET 和 $_COOKIE。设置为 "",那么将不会创建超全局变量。
; This directive determines which super global data (G,P & C) should be
; registered into the super global array REQUEST. If so, it also determines
; the order in which that data is registered. The values for this directive
; are specified in the same manner as the variables_order directive,
; EXCEPT one. Leaving this value empty will cause PHP to use the value set
; in the variables_order directive. It does not mean it will leave the super
; globals array REQUEST empty.
; Default Value: None
; Development Value: "GP"
; Production Value: "GP"
; http://php.net/request-order
request_order = "GP"
request_order:这个配置项设置 PHP 将 GET, POST 和 Cookie 中的哪些添加到 $_REQUEST 中,并且指定了填充时的顺序。如果 request_order 设置为空,则填充的顺序会以 variables_order 配置项中的顺序为准。
例如,设置为 request_order = "GP"
时,代表 $_REQUEST 将包含 $_GET 和 $_POST 的值,并且当 $_GET 和 $_POST 中的键相同时,$_POST的值将覆盖 $_GET 的值。
结论
$_REQUEST 的值与 php.ini 中的配置相关。推荐在项目中尽量不要使用 $_REQUEST,而是明确的从 $_GET,$_POST,$COOKIE 中取值。
参考资料
1、http://php.net/variables-order
2、http://php.net/request-order
3、https://github.com/php/php-src/blob/master/php.ini-production#L594-L61...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。