PHP使用$_REQUEST要小心 - 逝去的青春

PHP使用$_REQUEST要小心

作者:jao 发布于:2012-12-27 22:11 分类:PHP教程

  先说说我个人的经历。在某个报表的程序里,我使用了$_REQUEST来接收要查询某个条件的数据,$_REQUEST['from'],如果没有传递来(默认),我就会获取已有数据的from中第一个。做出来后,在我的机上运行测试通过,传到服务器上,测试通过。在验收的时候,出bug了,而且这个bug很奇怪,同样的程序,放在同一个服务器上,同一个网站,同一个网址,只是不同的电脑,在我的电脑打开默认情况下是有数据,在有的机上打开默认情况下是没数据。为了排除是客户端浏览器的差异,我在程序里将数据的数组print_r打印出来,结果还是一样,我这里能打印出一堆数据,而有之前没数据的机上看,输出了一个空数组。

    不少朋友应该也碰到过这样的需求:传递某个参数时,如果表单POST来,就用$_POST的值,如果没有,就获取$_GET里的值。很多人就会想到$_REQUEST,因为当$_GET和$_POST同时有同名的参数时,$_REQUEST里的就是$_POST,满足了$_POST优先的需求(这个谁优先其实是在php.ini里配置的,默认POST是比GET优先的)。

    但是,方便的东西总会带来隐患。很多人在使用$_REQUEST的时候,都把$_COOKIE给忘掉了,认为$_REQUEST是将$_GET和$_POST结合的数组。$_REQUEST是什么,哪个优先,其实是根据php.ini的variables_order参数确定的,默认情况下是"EGPCS"。

    我那个情况,就是有的机在某个子站下的某些程序设了名为from的COOKIE,而且作用域是*.主域名,所以他的机上$_REQUEST是会有内容的,是$_COOKIE里的from,而拿他这个from去查数据,当然是没有了,呵呵。

    写代码的时候,不要求方便,严格要求自己,才能写出更健壮的程序。

标签: php教程 PHP result

et_highlighter
Copyright © 2012-2013 逝去的青春 蜀ICP备13029051号-1 手机版 安全联盟 Theme by Admin73 sitemap