PHP 中 $_REQUEST、$_GET、$_POST、$_COOKIE 的關系和差別
1.關系:$_REQUEST包含了$_GET、$_POST、$_COOKIE的所有内容,是它們的集合體。
2.$_GET、$_POST、$_COOKIE在$_REQUEST中都有一個副本。改變$_REQUEST的值不影響$_GET等,反之亦然。
3.GET和POST同名的情況下,$_REQUEST取的是POST的值。COOKIE與GET或POST重名的情況下,$_REQUEST取的是COOKIE的值。COOKIE的優先級最高。錯誤。
6.7.2010 update :
PHP.INI中很明确了,variables_order = "GPCS",
這個優先順序是可以改變的。
真是的,我層次太低了。
測試開始。
測試1:
<code>
echo '<pre>';//源格式列印
//URL加上m=xxoo&url=www.jzread.com來測試$_GET
print_r($_REQUEST);//首先列印内容
print_r($_GET);
$_REQUEST = array();//清空$_REQUEST
echo $_GET['m'];
echo '</pre>';
</code>
測試結果:$_GET['m']的值是xxoo。
測試2:
<code>
echo '<pre>';//源格式列印
//URL加上m=xxoo來測試$_GET
print_r($_REQUEST);
print_r($_GET);
$_GET = array();//清空
print_r($_REQUEST);
echo '</pre>';
</code>
測試結果:$_REQUEST['m']的值是xxoo。
結論:對$_REQUEST的操作沒有影響到$_GET,反之亦然。$_REQUEST隻是包含了一個$_GET的副本(the same as $_POST 哈哈)。
好。繼續
測試3
<code>
//POST-GET重名測試
//從其他頁面POST傳送一個m的值為post,action位址加上m=get
print_r($_REQUEST);
print_r($_GET);
print_r($_POST);
</code>
結果:$_REQUEST['m'] == 'post'。
結論:同時送出GET和POST且同名,$_REQUEST取的是POST的值。(可能是POST優先級更高。)
測試4
<code>
//cookie與postget 重名測試
setcookie('m', 'cookie', time()+3600);//先把COOKIE種上,名字為m,值為cookie。然後重新整理。(COOKIE要重新整理才生效)
//從其他頁面POST傳送一個m的值為post,action位址加上m=get
print_r($_REQUEST);
</code>
結果:$_REQUEST['m'] == 'cookie'。結論:COOKIE的優先級最高。