PHP 超级全局变量学习笔记
在 PHP 中,有几种超级全局变量可以从任何作用域中访问,包括用户定义的函数中。这些变量是:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
$GLOBALS
$GLOBALS
是一个包含了全部变量的全局组合数组,在一个 PHP 脚本的全部作用域中都可用。变量的名称就是数组的键名,变量的值就是数组的键值。以下是一个使用 $GLOBALS
的例子:
phpCopy Code<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
输出:
Copy Code100
在上面的例子中,没有通过参数传递变量,而是在函数内使用了 $GLOBALS
数组来访问变量。
$_SERVER
$_SERVER
是一个包含了诸如头信息、路径和脚本位置等等信息的数组。下面是一些常用的 $_SERVER
变量:
$_SERVER['PHP_SELF']
:当前的 PHP 脚本文件名。$_SERVER['GATEWAY_INTERFACE']
:服务器使用的 CGI 规范的版本。$_SERVER['SERVER_ADDR']
:当前运行脚本所在的服务器的 IP 地址。$_SERVER['SERVER_NAME']
:当前运行脚本所在的服务器的主机名。$_SERVER['SERVER_SOFTWARE']
:服务器标识字符串。
以下是一个使用 $_SERVER
的例子:
phpCopy Code<?php
echo "当前 PHP 脚本文件名为:" . $_SERVER['PHP_SELF'];
?>
输出:
Copy Code当前 PHP 脚本文件名为:/index.php
$_GET
$_GET
用于收集通过 URL 参数传递的变量值,例如:
phpCopy Code<?php
echo "网站名:" . $_GET['name'] . "<br>";
echo "URL:" . $_GET['url'];
?>
当以上 PHP 脚本被访问时,带有参数的 URL 如下所示:
Copy Codehttp://localhost/test.php?name=runoob&url=http://www.runoob.com
输出:
Copy Code网站名:runoob
URL:http://www.runoob.com
$_POST
$_POST
用于收集通过 HTTP POST 方法提交的变量值,例如:
phpCopy Code<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
名字:<input type="text" name="fname">
年龄:<input type="text" name="age">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 收集表单数据
$name = $_POST['fname'];
$age = $_POST['age'];
if (empty($name)) {
echo "名字是空的";
} else {
echo "名字:$name <br>";
}
if (empty($age)) {
echo "年龄是空的";
} else {
echo "年龄:$age <br>";
}
}
?>
在上面的例子中,$_POST
变量用于收集表单数据,如果 $_POST
变量为空,则会输出一条消息。
$_FILES
$_FILES
用于收集通过 HTTP POST 方法上传的文件,例如:
phpCopy Code<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="上传图片" name="submit">
</form>
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "文件 " . basename($_FILES["fileToUpload"]["name"]) . " 上传成功。";
} else {
echo "抱歉,上传文件时发生了错误。";
}
?>
在上面的例子中,$_FILES
变量用于收集上传的文件数据,move_uploaded_file()
函数用于将文件移动到指定位置。
$_COOKIE
$_COOKIE
用于收集通过 HTTP Cookies 发送的变量值,例如:
phpCopy Code<?php
$name = "user";
$value = "Alex Porter";
setcookie($name, $value, time() + (86400 * 30), "/"); // 86400 = 1 天
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$name])) {
echo "Cookie 名字为 '" . $name . "' 的 Cookie 不存在。";
} else {
echo "Cookie 名字为 '" . $name . "' 的 Cookie 存在。";
echo "其值为:" . $_COOKIE[$name];
}
?>
</body>
</html>
在上面的例子中,$_COOKIE
变量用于收集通过 Cookies 发送的变量数据,setcookie()
函数用于设置 Cookie。
$_SESSION
$_SESSION
变量用于存储关于用户会话(session)的信息,例如:
phpCopy Code<?php
// 在脚本开始时启动会话
session_start();
// 设置 session 变量
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "已经设置了三个 Session 变量。";
?>
<html>
<body>
<?php
// 检索 session 变量
echo "我的最喜欢的颜色是 " . $_SESSION["favcolor"] . ".<br>";
echo "我的最喜欢的动物是 " . $_SESSION["favanimal"] . ".";
?>
</body>
</html>
在上面的例子中,$_SESSION
变量用于存储关于用户会话的信息,session_start()
函数用于启动会话。
$_REQUEST
$_REQUEST
用于收集 HTML 表单提交的数据,同时也可以收集 URL 中发送的数据。该变量可以收集 $_GET
、$_POST
和 $_COOKIE
的数据。例如:
phpCopy Code<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
名字:<input type="text" name="fname">
<input type="submit">
</form>
<?php
$name = $_REQUEST['fname'];
echo $name;
?>
在上面的例子中,$_REQUEST
变量用于收集表单数据,无论该数据是通过 $_GET
还是 $_POST
发送的。
$_ENV
$_ENV
用于从操作系统环境中收集变量。例如,以下代码段可以输出当前系统的用户信息:
phpCopy Code<?php
echo $_ENV["USER"];
?>
以上是 PHP 超级全局变量学习笔记的内容,希望能对你有所帮助。