📜  PHP-预定义变量(1)

📅  最后修改于: 2023-12-03 14:45:27.064000             🧑  作者: Mango

PHP-预定义变量

PHP 中有许多预定义变量,它们都是超全局变量,在脚本的全部作用域中都可以使用,无需特别声明即可使用。这些变量用于从脚本外部获取信息或传递信息等操作。这篇文章将详细介绍 PHP 中的预定义变量。

$GLOBALS

$GLOBALS 是一个包含了所有全局变量的全局组合数组,其中变量名就是数组的键名,变量值就是数组的键值。

<?php
$x = 10;
$y = 20;

function addition() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

addition();
echo $z;
?>

输出:

30
$_SERVER

$_SERVER 是一个包含了服务器信息的数组,比如它包含了 HTTP 头信息、路径以及脚本位置等。

常用的 $_SERVER 变量

| 变量 | 描述 | | --- | --- | | $_SERVER['PHP_SELF'] | 返回当前执行脚本的文件名 | | $_SERVER['GATEWAY_INTERFACE'] | 返回服务器使用的 CGI 规范的版本 | | $_SERVER['SERVER_ADDR'] | 返回当前运行脚本所在的服务器的 IP 地址 | | $_SERVER['SERVER_NAME'] | 返回当前运行脚本所在的服务器的主机名(例如 www.example.com) | | $_SERVER['SERVER_SOFTWARE'] | 返回 Web 服务器的名称和版本(例如 Apache/2.2.24) | | $_SERVER['SERVER_PROTOCOL'] | 返回请求页面时通信协议的名称和版本(例如“HTTP/1.0”)。 | | $_SERVER['REQUEST_METHOD'] | 返回访问页面使用的请求方法(例如 GET 或 POST) | | $_SERVER['QUERY_STRING'] | 返回查询字符串,如果有的话,通过它访问页面 | | $_SERVER['HTTP_ACCEPT'] | 返回来自当前请求的请求头 | | $_SERVER['HTTP_ACCEPT_CHARSET'] | 返回当前请求的字符集 | | $_SERVER['HTTP_HOST'] | 返回当前请求的 Host 头部的内容,如果存在的话(例如 www.example.com) | | $_SERVER['HTTP_REFERER'] | 返回当前页面的完整 URL(不可靠,因为不是所有浏览器都支持) | | $_SERVER['HTTPS'] | 如果当前请求是通过 HTTPS 协议访问的,则返回值为 on,否则返回值为空字符串 | | $_SERVER['REMOTE_ADDR'] | 返回浏览当前页面的用户的 IP 地址 | | $_SERVER['REMOTE_HOST'] | 返回浏览当前页面的用户的主机名 | | $_SERVER['REMOTE_PORT'] | 返回浏览当前页面的用户的端口号 | | $_SERVER['SCRIPT_FILENAME'] | 返回当前执行脚本的绝对路径 | | $_SERVER['SCRIPT_NAME'] | 返回当前脚本的路径 |

$_GET

$_GET 包含了所有 HTTP GET 请求的变量及它们的值。

例子

如果访问 URL test.php?id=1&name=John,同时输出 $_GET 变量的内容:

<?php
print_r($_GET);
?>

输出:

Array (
    [id] => 1
    [name] => John
)
$_POST

$_POST 包含了所有 HTTP POST 请求的变量及它们的值。

例子

假设有一个名为 form.html 的表单:

<html>
<body>

<form action="welcome.php" method="post">
    Name: <input type="text" name="name"><br>
    E-mail: <input type="text" name="email"><br>
    <input type="submit">
</form>

</body>
</html>

当用户提交该表单时,将 $_POST 变量传递到 welcome.php 文件中:

<?php
echo "Welcome " . $_POST["name"] . "!<br>";
echo "Your email address is: " . $_POST["email"];
?>

输出:

Welcome John!
Your email address is: john@example.com
$_REQUEST

$_REQUEST 包含了 $_GET$_POST$_COOKIE 的数组。

例子

如果访问 URL welcome.php?id=1&name=John,将 $_REQUEST 变量的内容传递到 welcome.php 文件中:

<?php
echo "Welcome " . $_REQUEST['name'] . "<br>";
echo "Your id is: " . $_REQUEST['id'];
?>

输出:

Welcome John
Your id is: 1
$_COOKIE

$_COOKIE 包含了所有 HTTP Cookies。

例子

将一个名为 user 的 cookie 添加到客户端,在下一次访问时输出:

<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>

<html>
<body>

<?php
if(isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is set!<br>";
    echo "Value is: " . $_COOKIE[$cookie_name];
} else {
    echo "Cookie named '" . $cookie_name . "' is not set!";
}
?>

</body>
</html>

输出:

Cookie named 'user' is set!
Value is: John Doe
$_SESSION

$_SESSION 变量用于存储特定用户会话所需的信息。这些变量可以跨越网页的所有页面传递。

例子

创建一个名为 session.php 的页面,在该页面中将一个名为 favcolor 的 session 变量设置为 green

<?php
session_start();
$_SESSION["favcolor"] = "green";
?>

<html>
<body>

<?php
echo "Session variables are set.";
?>

</body>
</html>

接下来,创建一个名为 checksession.php 的页面,在该页面中检查 favcolor 变量并输出:

<?php
session_start();
?>

<html>
<body>

<?php
// 检索 session 变量
echo "Favorite color is " . $_SESSION["favcolor"] . ".";
?>

</body>
</html>

输出:

Favorite color is green.
$_FILES

$_FILES 变量用于在 Web 表单中上传文件时存储上传文件的信息。

例子

创建一个名为 upload_file.php 的页面,在该页面中上传文件,并在上传完成后输出文件名:

<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

接下来,创建一个名为 upload.php 的页面,在该页面中检查 $_FILES 变量并输出文件名:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 检查文件大小,最大为 500KB
if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}

// 检查文件格式
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// 检查上传状态
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// 如果一切都没问题,上传文件
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }
}
?>

输出:

The file myimage.jpg has been uploaded.
$_ENV

$_ENV 变量包含了所有环境变量,比如 PHP_VERSION

例子

检索当前的 PHP 版本:

<?php
echo 'Current PHP version: ' . $_ENV['PHP_VERSION'];
?>

输出:

Current PHP version: 7.2.4
$argv

$argv 变量包含了传递给脚本的命令行参数,其中 $argv[0] 代表脚本文件名,$argv[1] 是第一个参数,以此类推。

例子

假设有一个名为 test.php 的脚本:

<?php
echo "Hello " . $argv[1] . "!";
?>

在命令行中执行 php test.php John,输出:

Hello John!
$argc

$argc 变量包含了传递给脚本的命令行参数的数量(包括脚本文件名本身)。

例子

再次使用名为 test.php 的脚本:

<?php
echo "Number of command line arguments: " . $argc;
?>

在命令行中执行 php test.php John Doe,输出:

Number of command line arguments: 3
结论

PHP 中的预定义变量非常重要,它们用于在脚本中获取和传递信息。在这篇文章中,我们详细介绍了 PHP 中的预定义变量,并提供了许多例子帮助读者更好地了解它们的用法。