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 Code
100

在上面的例子中,没有通过参数传递变量,而是在函数内使用了 $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 Code
http://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 超级全局变量学习笔记的内容,希望能对你有所帮助。