大家都知道使用$_REQUEST可以直接省去了判斷post,get一些代碼,使用起來更簡單,但是如果要詳細的去想我們會覺得$_REQUEST太可怕了,下面看分析.
我們都知道,處理表單數據,可以使用PHP的$_GET和$_POST這兩個超全局變量,具體是哪個由form表單提交時的method指定,除此之外PHP還為我們提供了$_REQUEST數組,但是其不僅包含$_GET和$_POST的所有數據元素,同時其還會包含$_COOKIE這個超全局數組的所有數據元素.
可是大家有沒有想過,如果這三個數組里面的key相同,那么我用$_REQUEST得到的到底是哪個數組的值呢?會不會有什么問題?
我用如下代碼為大家做演示,因為只是想說明問題,所以這里面不對$_COOKIE進行設置,請大家自行處理,代碼如下:
- <?php
- var_dump($_GET['a'],$_POST['a'],$_REQUEST['a']);
- ?>
- <html>
- <head><title>demo</title></head>
- <body>//開源代碼Vevb.com
- <form method= 'post' action = 'req.php?a=xxx'>
- <input type='hidden' name='a' value='yyy'/>
- <input type='submit' name='submit' value='submit'/>
- </form>
- </body>
- </html>
當我提交表單的時候,我獲取的頁面內容為:
string(3) "xxx" string(3) "yyy" string(3) "yyy"
同樣的內容,在$_REQUEST里面,POST的值覆蓋了GET的值,這到底是怎么回事呢?其實這是在PHP的配置文件里面設置的,讓我們來看一下php.ini這個配置文件,在第466行左右有如下內容:
- ; This directive describes the order in which PHP registers GET, POST, Cookie,
- ; Environment and Built-in variables (G, P, C, E & S respectively, often
- ; referred to as EGPCS or GPC). Registration is done from left to right, newer
- ; values override older values.
- variables_order = "EGPCS"
這個EGPCS就是說明用$_REQUEST數組獲取內容的優先級,其字母的含義分別代表為:E代表$_ENV,G代表$_GET,P代表$_POST,C代表$_COOKIE,S代表$_SESSION。后面出現的數據會覆蓋前面寫入的數據,其默認的數據寫入方式就是EGPCS,所以POST包含的數據將覆蓋GET中使用相同關鍵字的數據.
$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比較慢,通過post和get方法提交的所有數據都可以通過$_REQUEST數組獲得.
新聞熱點
疑難解答