主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

PHP 超级全局变量

PHP 中的超级全局变量是在所有作用域中自动可用的内置变量,无需使用global关键字声明。

它们在脚本的任何地方都可以访问,包括函数类方法内部。

✅ PHP 超级全局变量列表:

  • $GLOBALS - 引用全局作用域中可用的全部变量。
  • $_SERVER - 包含服务器和执行环境信息。
  • $_GET - 收集通过 URL 参数(GET 方法)提交的数据。
  • $_POST - 收集通过 HTTP POST 方法提交的表单数据。
  • $_REQUEST - 默认包含$_GET$_POST$_COOKIE的内容。
  • $_FILES - 包含通过 HTTP POST 方法上传文件的信息。
  • $_ENV - 包含服务器环境变量。
  • $_COOKIE - 包含通过 HTTP Cookies 传递的变量。
  • $_SESSION - 包含会话变量,用于在不同页面间保持用户数据。

PHP $GLOBALS

$GLOBALS 是 PHP 中的一个超全局变量,它包含了当前脚本中所有全局作用域中的变量。

它是一个关联数组,变量名作为键,变量值作为对应的值。

1. $GLOBALS 基本用法

下面是 $GLOBALS 的基本用法:

$a = 100;
$b = 200;

function sum() {
    $GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

sum();
echo $b; // 输出 300

在这个例子中,我们定义了两个全局变量$a$b,然后在sum()函数中通过$GLOBALS访问并修改了它们的值。

2. 与 global 关键字的区别

$GLOBALSglobal关键字都可以用于访问全局变量,但工作方式不同:

$x = 100;
$y = 200;

function testGlobal() {
    global $x, $y;
    $y = $x + $y;
}

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

testGlobal();
echo $y; // 输出 300

testGlobals();
echo $y; // 输出 400

global关键字是在函数内部创建对全局变量的引用,而$GLOBALS是直接访问全局变量数组。


PHP $_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)和脚本位置(script locations)等信息的数组。

这些信息由 Web 服务器创建,不同的服务器可能会提供不同的信息。

✅ 实际应用实例:

1. 获取客户端 IP 地址:

if (isset($_SERVER['REMOTE_ADDR'])) {
    $ip = $_SERVER['REMOTE_ADDR'];
    echo "您的 IP 地址是: " . $ip;
}

2. 检测请求方法:

if (isset($_SERVER['REMOTE_ADDR'])) {
    $ip = $_SERVER['REMOTE_ADDR'];
    echo "您的 IP 地址是: " . $ip;
}

3. 获取当前页面 URL:

$url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
echo "当前 URL 是: " . $url;

4. 获取用户浏览器信息:

$browser = $_SERVER['HTTP_USER_AGENT'];
echo "您的浏览器是: " . $browser;

✅ 常用 $_SERVER 元素:

1. 服务器信息
$_SERVER['SERVER_NAME'] 当前运行脚本所在的服务器的主机名
$_SERVER['SERVER_ADDR'] 服务器 IP 地址
$_SERVER['SERVER_PORT'] 服务器使用的端口
$_SERVER['SERVER_SOFTWARE'] 服务器标识字符串
$_SERVER['SERVER_PROTOCOL'] 请求页面时通信协议的名称和版本
2. 请求信息
$_SERVER['REQUEST_METHOD'] 访问页面使用的请求方法(如 GET、POST 等)
$_SERVER['REQUEST_URI'] URI 用来指定要访问的页面
$_SERVER['QUERY_STRING'] 查询字符串(URL 中问号 ? 之后的内容)
$_SERVER['HTTP_REFERER'] 引导用户代理到当前页的前一页的地址
$_SERVER['HTTP_USER_AGENT'] 用户代理信息(浏览器信息)
$_SERVER['REMOTE_ADDR'] 浏览当前页面的用户的 IP 地址
$_SERVER['REMOTE_PORT'] 用户机器上连接到 Web 服务器所使用的端口号
3. 脚本信息
$_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径
$_SERVER['SCRIPT_NAME'] 包含当前脚本的路径
$_SERVER['PHP_SELF'] 当前执行脚本的文件名
$_SERVER['DOCUMENT_ROOT'] 当前运行脚本所在的文档根目录

PHP $_GET

$_GET 用于收集通过 URL 参数(查询字符串)提交到当前脚本的数据。

// 基础过滤
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING);

// 检查参数是否存在
if (isset($_GET['page'])) {
    $page = $_GET['page'];
}

// 验证数字输入
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
    $id = (int)$_GET['id'];
}
  • URL 参数指的是 URL 中问号(?)后面的参数。
  • 数据直接显示在 URL 中,对用户可见,不适合传递敏感信息。
  • URL 有长度有限制,通常约2000个字符。
  • 使用$_GET时,务必进行数据过滤和验证。

提示:你如果想学习更多关于$_POST$_GET的知识,请访问我们的PHP 表单章节。


PHP $_POST

$_GET 用于收集通过 HTTP POST 方法提交的表单数据。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 检查字段是否存在
    if (isset($_POST['username']) && isset($_POST['password'])) {
        $username = htmlspecialchars($_POST['username']);
        $password = $_POST['password'];

        // 处理登录逻辑...
    }
}
  • $_POST是一个以表单字段名为键、字段值为值的关联数组。
  • 仅当Content-Typeapplication/x-www-form-urlencodedmultipart/form-data时有效。
  • 应对从$_POST获取的数据进行验证和过滤,建议使用filter_input()函数过滤输入。
  • 对输出到 HTML 的内容使用htmlspecialchars()防止 XSS 攻击。

PHP $_REQUEST

$_REQUEST 用于收集通过 HTTP 请求提交到脚本的数据(包括 GET、POST 和 COOKIE 方法)。

$_REQUEST 本质上是_GET,$_POST$_COOKIE数据的合并数组。

// 处理表单提交
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 虽然可以用 $_REQUEST,但明确知道是POST数据时,直接用$_POST更安全
    $username = $_POST['username'];
}

// 获取URL参数
// 虽然可以用 $_REQUEST,但明确知道是GET参数时,直接用$_GET更清晰
$page = $_GET['page'] ?? 1;
  • 避若明确知道数据来源时,应直接使用对应的$_GET$_POST来获取数据。
  • 对从$_REQUEST获取的数据,要进行严格过滤和验证。
  • 可以在php.ini中,通过设置只包含特定来源,提高安全性。


评论区 0
发表评论