使用$_REQUEST 要留意的地方
网络整理 - 08-26
做大相册接口的时候,要传递图片的host过来,程序这边用 $_REQUEST['host'] 获得。在浏览器测试了一下,发现得到的并非是url参数传过来的host。测试发现时cookie存在键为host的值,才醒起是cookie中的host覆盖了get中的host。
$_REQUEST 包含 GET/POST/Cookie 。在键值相同时默认是 POST覆盖GET,COOKIE覆盖POST或GET。
这个默认的顺序也可以改,在 php.ini 中查找variables_order,会看到类似
variables_order = "EGPCS"
这就是php注册变量的顺序,E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SERVER。在register_globals为on时,新的值会覆盖之前的值。例如在register_globals为on时,可以直接用$key代替$_GET['key']。同样这个顺序的gpc也作用在$_REQUEST中。
如果你禁止了 register_globals,但又想用到一些全局变量,可以用 extract() 函数。在没有权限修改 variables_order 的顺序时,想用到全局变量又想设置一下覆盖的顺序时可以用
import_request_variables('gpc') ;
实现。同样,键值相同时会按函数参数的顺序覆盖而不受php.ini的variables_order顺序制约。