ZAČÁTKYNÁVODYOOPDOKUMENTACE
教程/
变量

超全球变量

01. 11. 2019

Obsah článku

超全局变量用于传递全局应用状态和HTTP通信。

这些变量的主要优点是,它们随时随地都可以使用。在实践中,它们是数值的数组,我们通过索引访问特定的信息。在不同的情况下,钥匙的可用性可能有所不同(解释如下)。

超全局变量的类型

在PHP中所有的超级球体都是数组,用美元符号和下划线表示(除了$GLOBALS),并使用大写字母。

在 "PHP 7 "中,特别是有以下内容。

变量 说明
$_GET URL参数由GET方法发送
$_POST 表格数据通过POST发送。请注意,在ajax中可能会有不同的表现
$_REQUEST 由任何方法($_GET$_POST$_REQUEST)发送的表单数据。
$_FILES 关于当前上传文件的技术信息,例如通过<input type="file">结构。
$_SERVER 网络服务器设置、IP地址、配置......它因环境而异(当从终端调用一个PHP脚本时,它将包含不同的值,例如,关于当前请求的信息将被遗漏)。
$_COOKIE 配置了cookies
$_SESSION 会话数据(session),如果它存在并且在过去被设置过。
$GLOBALS **警告,名称中不包含下划线!**这是所谓的global-variable,是关键词global'的替代符号。如果你的应用程序中有一个全局变量$variable,你也可以用$GLOBALS["variable"]`结构访问它。然而,使用全局变量在设计上是一个糟糕的、不纯净的解决方案,所以你最好不要这样做。
$_ENV 有关当前运行 PHP 的环境的信息。

列出所有现有的价值是很容易做到的。

foreach ($_SERVER as $key => $value {
echo $key . ':' . $value . '<br>';
}

注意:并非所有的索引都必须始终存在(例如,如果脚本在CLI模式下运行cron,带有页面URL或请求的IP地址的索引将不存在)。

访问变量

我建议所有的全局变量(除了$_SESSION)都是只读的。这是因为它们包含全局应用数据,其他代码可能会考虑到这一点(例如,另一个已安装的库)。

全局状态的另一个缺点是,你不能总是依赖精确的值,即使它们存在,所以你应该总是用isset()结构检查它们的键。

要保存一个新的cookie,请使用setcookie(),不要直接插入值。这是因为它是只读的。

汲取的经验教训

千万不要盲目相信超全局变量的值!这是不可能的。

用户可以使用URL和发送的头文件来影响数值的设置。所有的输入都应该总是被仔细验证。

注册球状物--旧版PHP的麻烦

在旧版本的PHP中(直到5.4.0),有一个特殊的register-globals指令(可在php.ini中配置),使URL中所有传递的参数都自动注册为变量。

比如说。

一个用户来到了URL:https://example.com/script.php?var=24

而PHP在脚本中自动创建了一个变量$var,其值为24

所以它的工作原理是经典的。

echo $var;

因此,任何人都可以把任何变量塞进脚本并改变其内容。显然,安全并不总是一个优先事项。并非如此。

其他来源

关于更详细的描述,请参阅官方手册

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
6.