PHP 超级全局变量

PHP 超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

PHP $GLOBALS

$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。

$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

以下实例介绍了如何使用超级全局变量 $GLOBALS:

<?php
/**
 * $GLOBALS 示例
 */
//定义全局变量
$x = 10;
$y = 20;

//定义函数,在函数内部使用全局变量
function add(){
    //内部定义全局变量
    $GLOBALS["z"]=$GLOBALS["x"]+$GLOBALS['y'];
}
//函数调用
add();
echo $z;//注意这里

?>

实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问

PHP $_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。

对该数组进行遍历运行结果如下:

<?php
/**
 * $_SERVER 示例
 */

foreach ($_SERVER as $key => $value){
    echo '['.$key.'] => '.$value.'<br/>';
}

?>
[MIBDIRS] => C:/xampp/php/extras/mibs
[MYSQL_HOME] => \xampp\mysql\bin
[OPENSSL_CONF] => C:/xampp/apache/bin/openssl.cnf
[PHP_PEAR_SYSCONF_DIR] => \xampp\php
[PHPRC] => \xampp\php
[TMP] => \xampp\tmp
[HTTP_HOST] => 127.0.0.1
[HTTP_CONNECTION] => keep-alive
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_UPGRADE_INSECURE_REQUESTS] => 1
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
[HTTP_DNT] => 1
[HTTP_ACCEPT_ENCODING] => gzip, deflate, br
[HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8
[PATH] => C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Pandoc\;C:\Program Files (x86)\MacType;C:\Program Files (x86)\Common Files\Thunder Network\KanKan\Codecs;C:\java-tools\Java\JDK8_64\jdk1.8.0\bin;I:\apache-maven-3.3.9\bin;C:\Program Files\Bandizip;C:\Program Files\Bandizip\
[SystemRoot] => C:\Windows
[COMSPEC] => C:\Windows\system32\cmd.exe
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
[WINDIR] => C:\Windows
[SERVER_SIGNATURE] =>
Apache/2.4.26 (Win32) OpenSSL/1.0.2l PHP/7.1.7 Server at 127.0.0.1 Port 80

[SERVER_SOFTWARE] => Apache/2.4.26 (Win32) OpenSSL/1.0.2l PHP/7.1.7
[SERVER_NAME] => 127.0.0.1
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => C:/xampp/htdocs
[REQUEST_SCHEME] => http
[CONTEXT_PREFIX] => 
[CONTEXT_DOCUMENT_ROOT] => C:/xampp/htdocs
[SERVER_ADMIN] => postmaster@localhost
[SCRIPT_FILENAME] => C:/xampp/htdocs/php/01/demo02.php
[REMOTE_PORT] => 12856
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] => 
[REQUEST_URI] => /php/01/demo02.php
[SCRIPT_NAME] => /php/01/demo02.php
[PHP_SELF] => /php/01/demo02.php
[REQUEST_TIME_FLOAT] => 1504054573.321
[REQUEST_TIME] => 1504054573

下表列出了所有 $_SERVER 变量中的重要元素:

元素/代码 描述
$_SERVER['PHP_SELF'] 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.barFILE 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。
$_SERVER['GATEWAY_INTERFACE'] 服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。
$_SERVER['SERVER_ADDR'] 当前运行脚本所在的服务器的 IP 地址。
$_SERVER['SERVER_NAME'] 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)
$_SERVER['SERVER_SOFTWARE'] 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24)
$_SERVER['SERVER_PROTOCOL'] 请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。
$_SERVER['REQUEST_METHOD'] 访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。
$_SERVER['REQUEST_TIME'] 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496)
$_SERVER['QUERY_STRING'] query string(查询字符串),如果有的话,通过它进行页面访问。
$_SERVER['HTTP_ACCEPT'] 当前请求头中 Accept: 项的内容,如果存在的话。
$_SERVER['HTTP_ACCEPT_CHARSET'] 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。
$_SERVER['HTTP_HOST'] 当前请求头中 Host: 项的内容,如果存在的话。
$_SERVER['HTTP_REFERER'] 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。)
$_SERVER['HTTPS'] 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。
$_SERVER['REMOTE_ADDR'] 浏览当前页面的用户的 IP 地址。
$_SERVER['REMOTE_HOST'] 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。
$_SERVER['REMOTE_PORT'] 用户机器上连接到 Web 服务器所使用的端口号。
$_SERVER['SCRIPT_FILENAME'] 当前执行脚本的绝对路径。
$_SERVER['SERVER_ADMIN'] 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com)
$_SERVER['SERVER_PORT'] Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
$_SERVER['SERVER_SIGNATURE'] 包含了服务器版本和虚拟主机名的字符串。
$_SERVER['PATH_TRANSLATED'] 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。
$_SERVER['SCRIPT_NAME'] 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。
$_SERVER['SCRIPT_URI'] URI 用来指定要访问的页面。例如 "/index.html"。

PHP $_REQUEST

PHP $_REQUEST 用于收集HTML表单提交的数据。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>简单的数据提交显示</title>
    </head>
    <body>
        <h3>手动设置自己提交给自己</h3>
        <form action="demo04.php" method="get">
            用户的姓名:<input type="text" name="user_name">
            <button>GET请求提交数据</button>
        </form>
        <hr/>
        <h3>使用$_SERVER获取当前的路径</h3>
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
            用户的姓名:<input type="text" name="user_name">
            <button>POST请求提交数据</button>
        </form>
        <hr/>
        <h3>显示数据</h3>
        <?php
        /**
         * $_REQUEST 示例 用于获取客户端数据
         */
        //判断变量是否存在
        if(isset($_REQUEST['user_name'])){
            $user_name = $_REQUEST['user_name'];
            echo $user_name;
        }
        ?>
    </body>
</html>

访问的源码HTML效果,请注意action属性的值

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>简单的数据提交显示</title>
    </head>
    <body>
        <h3>手动设置自己提交给自己</h3>
        <form action="demo04.php" method="get">
            用户的姓名:<input type="text" name="user_name">
            <button>GET请求提交数据</button>
        </form>
        <hr/>
        <h3>使用$_SERVER获取当前的路径</h3>
        <form action="/php/01/demo04.php" method="post">
            用户的姓名:<input type="text" name="user_name">
            <button>POST请求提交数据</button>
        </form>
        <hr/>
        <h3>显示数据</h3>
            </body>
</html>

运行效果图:

PHP $_POST

PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。

以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。 当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发送至<form>标签中 action 属性中指定的脚本文件。 在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>简单的数据提交显示</title>
    </head>
    <body>
        <h3>使用$_SERVER获取当前的路径</h3>
        <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
            用户的姓名:<input type="text" name="user_name">
            <button>POST请求提交数据</button>
        </form>
        <hr/>
        <h3>显示数据</h3>
        <?php
        /**
         * $_POST 示例 用于获取客户端数据
         */
        //判断变量是否存在
        if(isset($_POST['user_name'])){
            $user_name = $_POST['user_name'];
            echo $user_name;
        }
        ?>
    </body>
</html>

PHP $_GET

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

$_GET 也可以收集URL中发送的数据。

假定我们有一个包含参数的超链接HTML页面:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>简单的数据提交显示</title>
    </head>
    <body>
        <h3>超链接传递数据-访问自己</h3>
        <a href="demo06.php?user_name=悟空&id=100">GET请求传递数据</a>
        <hr/>
        <h3>显示数据</h3>
        <?php
        /**
         * $_GET 示例 用于获取客户端数据
         */
        //判断变量是否存在
        if(isset($_GET['user_name'])&&isset($_GET["id"])){

            echo "您传递的数据为,用户名为{$_GET["user_name"]},ID为{$_GET["id"]}";
        }
        ?>
    </body>
</html>

PHP Session 变量

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。

PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。

Session 的工作机制是:

为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。


开始 PHP Session

在您把用户信息存储到 PHP session 中之前,首先必须启动会话。

注释:session_start() 函数必须位于 <html> 标签之前:

跟namespace的规则一致;

<?php
    //开启会话
    session_start();

    echo '系统自动生成的浏览器中的session标识:'.session_id();

?>

存储 Session 变量

存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

<?php
    //开启会话
    session_start();
    if(isset($_SESSION["view"])){//存在
        $_SESSION["view"] = $_SESSION["view"]+1;
    }else{
        $_SESSION["view"] = 1;
    }
?>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Session的入门测试示例</title>
    </head>
    <body>
        <h3> 浏览数量:<?php echo $_SESSION["view"] ; ?> </h3>

    </body>
</html>

我们创建了一个简单的 page-view 计数器。isset() 函数检测是否已设置 "views" 变量。如果已设置 "views" 变量,我们累加计数器。如果 "views" 不存在,则创建 "views" 变量,并把它设置为 1

关闭浏览器会重新计数

销毁 Session

如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。

unset() 函数用于释放指定的 session 变量:

<?php
  session_start();
  if(isset($_SESSION['views'])){
      unset($_SESSION['views']);
  }
?>

您也可以通过调用 session_destroy() 函数彻底销毁 session:

<?php
    session_destroy();
?>

注释:session_destroy() 将重置 session,您将失去所有已存储的 session 数据。

PHP Cookie

cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

如何创建 Cookie?

setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

<?php
$expire=time()+60*60;
setcookie("user", "pangsir", $expire);//一小时过期
?>

如何取回 Cookie 的值?

PHP 的 $_COOKIE 变量用于取回 cookie 的值。

在下面的实例中,我们取回了名为 "user" 的 cookie 的值,并把它显示在了页面上:

<?php
if(isset($_COOKIE["user"])){
    // 输出 cookie 值
    echo $_COOKIE["user"];
    // 查看所有 cookie
    print_r($_COOKIE);
}else{
    echo "没有设置COOKIE值";
}

?>

如何删除 Cookie?

当删除 cookie 时,您应当使过期日期变更为过去的时间点。

删除的实例:

<?php
// 设置 cookie 过期时间为过去 1 小时
setcookie("user", "", time()-3600);
?>

经典登录代码示例

login.php代码

<?php
    /**
     * 经典登录示例
     */
    //开启session
    session_start();

    if(isset($_COOKIE["account"])&&isset($_COOKIE["password"])){
        $account = $_COOKIE['account'];
        $password = $_COOKIE['password'];

        if($account=="admin"&&$password=="123456"){
            //将数据存储到session会话当中
            $_SESSION["account"] = $account;
            //登录成功,跳转页面
            header('Location:main.php');
        }
    }

    if(isset($_POST['account'])&&$_POST['pwd']){
        $account = $_POST['account'];
        $password = $_POST['pwd'];
        if($account=="admin"&&$password=="123456"){
            //将数据存储到session会话当中
            $_SESSION["account"] = $account;
            //判断是否有标识
            if(isset($_POST['autoLogin'])){
                $time = time()+intval($_POST['autoLogin']);

                setcookie("account",$account,$time);
                setcookie("password",$password,$time);
            }
            //登录成功,跳转页面
            header('Location:main.php');
        }else{
            $message = "账号或者密码错误";
        }
    }
?>

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录示例</title>
    </head>
    <body>
        <h3>登录示例</h3>
        <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
            账号:<input type="text" name="account" ><br/>
            密码:<input type="password" name="pwd"><br/>
            <input type="checkbox" value="30" name="autoLogin"> 30秒自动登录<br/>
            <button>登录</button>
        </form>

        <span style="color: red;">
            <?php
                if(isset($message)){
                    echo $message;
                }
            ?>
        </span>

    </body>
</html>

main.php代码

<?php
    //开启session
    session_start();
?>
<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>主界面</title>
    </head>
    <body>
        <h3>登录成功</h3>
        欢迎:
        <?php
            if(isset($_SESSION["account"])){
                echo $_SESSION["account"];
            }
        ?>
    </body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容

  • Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象...
    廖马儿阅读 2,112评论 2 38
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 6,725评论 3 64
  • 一、会话控制(session与cookie) 1.cookie简介 Cookie是存储在客户端浏览器中的数据,我们...
    空谷悠阅读 615评论 0 5
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,156评论 11 349
  • 四年,四年,又四年,人生一共才多少个年头,能陪你走过这四年的,即使不是你生命中最重要的人,也是你记忆里不可或缺的朋...
    我只是个大众脸阅读 464评论 0 0