天天看點

PHP 中 $_REQUEST、$_GET、$_POST、$_COOKIE 的關系和差別

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的優先級最高。