📅  最后修改于: 2023-12-03 14:45:27.064000             🧑  作者: Mango
PHP 中有许多预定义变量,它们都是超全局变量,在脚本的全部作用域中都可以使用,无需特别声明即可使用。这些变量用于从脚本外部获取信息或传递信息等操作。这篇文章将详细介绍 PHP 中的预定义变量。
$GLOBALS
是一个包含了所有全局变量的全局组合数组,其中变量名就是数组的键名,变量值就是数组的键值。
<?php
$x = 10;
$y = 20;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
输出:
30
$_SERVER
是一个包含了服务器信息的数组,比如它包含了 HTTP 头信息、路径以及脚本位置等。
| 变量 | 描述 | | --- | --- | | $_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
包含了所有 HTTP GET 请求的变量及它们的值。
如果访问 URL test.php?id=1&name=John
,同时输出 $_GET
变量的内容:
<?php
print_r($_GET);
?>
输出:
Array (
[id] => 1
[name] => John
)
$_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
包含了 $_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
包含了所有 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.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
变量用于在 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
变量包含了所有环境变量,比如 PHP_VERSION
。
检索当前的 PHP
版本:
<?php
echo 'Current PHP version: ' . $_ENV['PHP_VERSION'];
?>
输出:
Current PHP version: 7.2.4
$argv
变量包含了传递给脚本的命令行参数,其中 $argv[0]
代表脚本文件名,$argv[1]
是第一个参数,以此类推。
假设有一个名为 test.php
的脚本:
<?php
echo "Hello " . $argv[1] . "!";
?>
在命令行中执行 php test.php John
,输出:
Hello John!
$argc
变量包含了传递给脚本的命令行参数的数量(包括脚本文件名本身)。
再次使用名为 test.php
的脚本:
<?php
echo "Number of command line arguments: " . $argc;
?>
在命令行中执行 php test.php John Doe
,输出:
Number of command line arguments: 3
PHP 中的预定义变量非常重要,它们用于在脚本中获取和传递信息。在这篇文章中,我们详细介绍了 PHP 中的预定义变量,并提供了许多例子帮助读者更好地了解它们的用法。