PHP Conference Japan 2024

$_REQUEST

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

$_REQUESTHTTP 請求變數

說明

一個關聯式 陣列,預設包含 $_GET$_POST$_COOKIE 的內容。

注意事項

注意:

這是一個「超全域」或自動全域變數。這表示它在整個程式碼的所有作用域中都可用。在函式或方法內不需要使用 global $variable; 就可以存取它。

注意:

當在命令列執行時,這將*不會*包含 argvargc 項目;這些項目存在於 $_SERVER 陣列中。

注意:

$_REQUEST 中的變數是透過 GET、POST 和 COOKIE 輸入機制提供給腳本的,因此可能被遠端使用者修改,不可信任。此陣列中變數的存在和順序是根據 PHP 的 request_ordervariables_order 設定指令來定義的。

新增註釋

使用者貢獻的註釋 4 則註釋

strata_ranger at hotmail dot com
16 年前
別忘了,因為 $_REQUEST 是與 $_GET 和 $_POST 不同的變數,所以在 PHP 中它會被視為如此 -- 在執行期間修改 $_GET 或 $_POST 元素不會影響 $_REQUEST 中的元素,反之亦然。

例如

<?php

$_GET
['foo'] = 'a';
$_POST['bar'] = 'b';
var_dump($_GET); // 元素 'foo' 是 string(1) "a"
var_dump($_POST); // 元素 'bar' 是 string(1) "b"
var_dump($_REQUEST); // 不包含元素 'foo' 或 'bar'

?>

如果您想用單個標記評估 $_GET 和 $_POST 變數而不包含 $_COOKIE,請使用 $_SERVER['REQUEST_METHOD'] 來識別所使用的方法,並據此設定 switch 區塊,例如

<?php

switch($_SERVER['REQUEST_METHOD'])
{
case
'GET': $the_request = &$_GET; break;
case
'POST': $the_request = &$_POST; break;
.
.
// 等等。
.
default:
}
?>
mike o.
14 年前
自 PHP 5.3.0 起,系統上的預設 php.ini 可能會從 $_REQUEST 中排除 Cookie。request_order ini 指令指定 $_REQUEST 陣列中的內容;如果該指令不存在,則由 variables_order 指令指定。您發佈版本的 php.ini 可能會預設排除 Cookie,所以請注意。
codeblog.pro
4 年前
在 PHP 7.0 版及之後的預設設定中,$_REQUEST 陣列不包含 Cookie。
Luke Madhanga
8 年前
要存取 $_POST、$_GET 等,請使用 filter_input(TYPE, varname, filter) 函式來確保您的資料是乾淨的。

此外,我一直認為修改超全域變數是一個不好的做法。我堅持這個信念,也建議您這樣做。
To Top