$_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 配置指令定义。

添加备注

用户贡献的备注 5 则备注

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
3 年前
在 PHP 7.0 及更高版本中,使用默认设置,$_REQUEST 数组不包含 cookie。
Luke Madhanga
8 年前
要访问 $_POST、$_GET 等,请使用 filter_input(TYPE, varname, filter) 函数以确保您的数据干净。

此外,我一直认为修改超级全局变量是一个坏主意。我坚持这个信念,也建议您这样做
Filomena
3 年前
警告

$_REQUEST 默认填充的方式可能导致奇怪的错误,因为配置指令“variables_order”的默认设置不佳。

示例:在电子商店中,您希望根据用户偏好显示价格。用户可以切换货币,或者使用之前的选择。默认情况下,以下代码将不会按预期工作

<?php
if ($_REQUEST['currency']) # 更改用户请求的货币
{
$currency = $_REQUEST['currency']; # 使用它
setcookie('currency', $_REQUEST['currency'], 0, 'eshop.php'); # 存储它
}
else
# 使用默认货币
{
$currency = 'USD';
}

# 使用用户选择的货币显示商店内容
echo '所有价格均以 ', $currency;

# 允许用户切换货币
echo '<a href="eshop.php?currency=USD">切换到 USD</a>';
echo
'<a href="eshop.php?currency=EUR">切换到 EUR</a>';
?>

无论用户选择什么,都会使用 cookie 值,因此除非您更改默认的“request_order”或“variables_order”,否则 $_REQUEST[something] 变量将永远使用 cookie 值,而不管用户的“REQUEST”是什么。

修复方案 1

<?php
ini_set
('request_order', 'CGP'); # 使用上一个值(存储在 cookie 中)或用户请求时的新值
.
.
.
?>

修复方案 2
要非常小心和耐心,使用 $_GET、$_POST 和 $_COOKIE,而不是方便的 $_REQUEST。祝您好运。
To Top