• 微信号
目录

php基础

您当前的位置:首页 > 我的笔记 > php基础>php超全局变量

php超全局变量

超全局变量是指在全部作用域中始终可用的内置变量。

php中的许多预定义变量都是超全局变量,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无须执行global $variable;语句就可以访问它们。

超全局变量

在php中一共有9个预定义超全局变量

变量名 功能描述
$_GET 经由php get方法提交至脚本的变量
$_POST 经由php post方法提交至脚本的变量
$_REQUEST 经由get、post和cookie机制提交至脚本的变量
$_SERVER 经由web服务器设定或者直接与当前脚本的执行环境相关联
$_ENV 执行环境提交至脚本的变量
$_FILES 经由php post文件上传而提交至脚本的变量
$_COOKIE 经由php cookies方法提交至脚本的变量
$_SESSION 当前注册给脚本会话的变量
$GLBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量

$_GET

在操作php脚本时,经常需要获取客户端提交的数据,对于get方式提交的数据,可以使用$_GET变量来获取,$_GET变量实际上是一个数组,它可以获取get方式提交表单的数据,也可以获取在url地址中的参数。

案例

<?php
    //判断通过url传递的参数中是否有username
    if(isset($_GET['username'])){
        $val=$_GET['username'];
        echo "usernam=".$val;
    }else {
        echo "没有获取到username参数";
    }
?>

在浏览器地址栏中输入:http://域名/文件地址?username=abc123,运行结果

陵小宇博客-php超全局变量$_GET

需要注意的是,$_GET变量只能获取以get方式提交的便当的参数信息

$_POST

对于post方式提交的表单,在PHP中可以通过$_POST变量来获取,它是一个数组。数组中的每一个键对应表单中的一个元素。如,表单中包含一个name为“user”的文本输入框,则在使用post方式提交数据后,可以使用$_POST['usr']获取用户输入的数据

案例

<?php
    header('content-type:text/html;charset=utf-8');
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $name=$_POST['username'];
        $sex=$_POST['sex'];
        $hobby=$_POST['hobby'];
        echo "姓名:".$name."<br>";
        echo "性别:".$sex."<br>";
        echo "爱好:";
        foreach($hobby as $key=>$val){
            echo $val;
        }
        exit;
    }
?>
<form action="test.php" method="post" enctype="multipart/form-data">
    姓名:<input type="text" name="username"><br><br>
    性别: 
    <input type="radio" name="sex" value="男">男
    <input type="radio" name="sex" value="女">女 
    <input type="radio" name="sex" value="保密">保密<br><br>
    爱好:
    <input type="checkbox" name="hobby[]" value="运动">运动
    <input type="checkbox" name="hobby[]" value="唱歌">唱歌
    <input type="checkbox" name="hobby[]" value="游泳">游泳<br><br>
    <input type="submit" value="提交">
</form>

运行结果

陵小宇博客-php超全局变量$_POST

点击提交后的,运行结果

陵小宇博客-php超全局变量$_POST

$_REQUEST

在php开发中,如果需要通过一种方式同时获取$_GET、$_POST中的数据时,可以使用预定义超全局变量$_REQUEST,$_REQUEST是一个可以保存各种方式传递数据给php的数组变量,默认情况下包含$_GET、$_POST和$_COOKIE中的内容,也就是说通过$_REQUEST可以获取$_GET、$_POST和$_COOKIE的数据

案例

<?php
    $a=$_REQUEST['a'];
    $b=$_REQUEST['b'];
    echo "<pre>";
    echo "a=".$a."<br>b=".$b;
    echo "</pre>";
?>

在地址栏输入:http://域名/文件地址?a=10&b=22;运行结果

陵小宇博客-php超全局变量$_REQUEST

值得一提的是,$_GET、$_POST和$_COOKIE在$_REQUEST中出现的顺序依赖于php的配置文件php.ini中variables_order配置指令指定的顺序。默认情况下,php对预定义变量的解析顺序为$_ENV、$_GET、$_POST、$_COOKIE、$_SERVER,解析后新值会覆盖同名的旧值

注意:由于$_REQUEST中的变量是通过GET、POST和COOKIE输入机制传递给脚本文件,所以可以被远程用户篡改而降低安全性,如,用户可以通过浏览器来修改url,所以在实际开发中,只有在不确定是GET请求还是POST请求的时候才会用到$_REQUEST

$_SERVER

在php程序中,如果需要在web服务器中保存交互信息,可以使用预定义超全局变量$_SERVER,它是由web服务器创建的信息数组,用于存放hiip请求头信息以及web服务器的信息,对于不同的web服务器,$_SERVER中包含的变量也会有所不同,常见的变量如下:

变量分类 变量名 变量说明
http请求头信息 HTTP_HOST web服务器的地址
HTTP_USER_AGENT 客户端操作系统和浏览器信息
HTTP_ACCEPT 当前HTTP请求的accept头部信息
HTTP_ACCEPT_LANGUAGE 当前HTTP请求的accept_language头部信息
HTTP_ACCEPT_ENCODING 当前HTTP请求的accept_encoding头部信息
HTTP_REFERER 链接到当前页面的前一页面的url地址
web服务器信息 SERVER_NAME web服务器的名字
SERVER_ADDR web服务器的IP地址
SERVER_PORT web服务器的端口号
REMOTE_ADDR 客户端的ip地址
DOCUMENT_ROOT web服务器中的应用代码存放位置
SERVE_ADMIN web服务器的管理账户
SCRIPT_FILENAME 当前访问的脚本文件的文件名
REMOTE_PORT 客户端的使用端口号
GATEWAY_INTERFACE 网关接口的信息
SERVER_PROTOCOL web服务器使用协议信息
REQUEST_METHOD 客户端发出的http请求中使用的方法
QUERY_STRING 客户端发出的http请求中的参数
REQUEST_URL url中的路径部分
SCRIPT_NAME 当前访问的脚本文件的相对路径
PHP_SELF 当前访问php脚本文件的相对路径
REQUEST_TIME 客户端发出http请求的时间

案例

<?php
    echo "客户端的ip地址:".$_SERVER['REMOTE_ADDR']."<br>";
    echo "文件的存放位置:".$_SERVER['DOCUMENT_ROOT']."<br>";
    echo "web服务器的地址:".$_SERVER['HTTP_HOST']."<br>";
    echo "脚本文件名:".$_SERVER['SCRIPT_FILENAME']."<br>";
    echo "表单的请求方式:".$_SERVER['REQUEST_METHOD']."<br>";
?>

运行结果

陵小宇博客-php超全局变量$_SERVER

$GLOBALS

超全局变量$GLOBALS是一个引用全局作用域中全部可用变量的数组,变量名就是数组的键,通过键就可以获取对应的全局变量的值。

案例

<?php
    function test(){
        $var1="局部变量 var1";
        echo "在当前范围内的:".$var1."<br>";
        echo "在全局范围内的:".$GLOBALS['var2']."<br>";
    }
    $var2="全局变量 var2";
    test();
?>

运行结果

陵小宇博客-php超全局变量$_SERVER