使用$_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顺序制约。