php中使用$_REQUEST需要注意的一个问题
问题
说起$_request,大家都知道的是它是$_get和$_post的集合。但是如果你有心的话,查一下文档,会看到:
$_request
an associative array that by default contains the contents of $_get, $_post and $_cookie.
这里说$_request默认是$_get, $_post, $_cookie的集合,结果我使用我本地的php查看了一下发现只有$_get, $_post, 没有$_cookie!! 难道文档是错的?
答案
其实changelog中有给出解释:
版本5.3以上,php.ini中有request_order属性来设置$_request。查了下php.ini, request_order设置成为了gp(get and post)。
request_order的官网描述:
request_order string
this directive describes the order in which php registers get, post and cookie variables into the _request array. registration is done from left to right, newer values override older values.
if this directive is not set, variables_order is used for $_request contents.
note that the default distribution php.ini files does not contain the 'c' for cookies, due to security concerns.
原来是g,p,c分别代表get,post,cookie,5.3以上的版本request_order默认是设置成gp的,并不包含c,即$_request默认只包含$_get和$_post !! (所以官网文档有一定的误导)。
也同时说一下g,p,c的先后顺序就是设置的array的覆盖顺序。
提醒下如果你是使用fpm-php实验的话,改了php.ini后你需要重启php-fpm