美文网首页PHP很简单
PHP强化之04 - 超全局数组

PHP强化之04 - 超全局数组

作者: 四月不见 | 来源:发表于2018-12-06 23:37 被阅读2次

    ----- 最后更新【2018-12-6】-----

    一、简介

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

    在PHP中超全局变量一共有9种,它们分别是:$GLOBALS、$_SERVER、$_GET、$_POST、$_FILES、$_COOKIE、$_SESSION、$_REQUEST、$_ENV

    二、超全局变量

    1、$GLOBALS

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

    使用var_dump(GLOBALS)打印,就可以看出\GLOBALS是一个包含了所有的一个全局组合数组。

    array (size=9)
      '_GET' => 
        array (size=1)
          'aa' => string '12345' (length=5)
      '_POST' => 
        array (size=0)
          empty
      '_COOKIE' => 
        array (size=1)
          'PHPSESSID' => string 'dscqcql91ap682d83oi80c3aj6' (length=26)
      '_FILES' => 
        array (size=0)
          empty
      '_SESSION' => 
        array (size=0)
          empty
      '_ENV' => 
        array (size=0)
          empty
      '_REQUEST' => 
        array (size=1)
          'aa' => string '12345' (length=5)
      '_SERVER' => 
        array (size=32)
          'HTTP_HOST' => string '47. ... .116' (length=14)
          'HTTP_CONNECTION' => string 'keep-alive' (length=10)
          ... ...
          'REQUEST_TIME_FLOAT' => float 1544101407.738
          'REQUEST_TIME' => int 1544101407
      'GLOBALS' => 
        &array<
    

    2、$_SERVER

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

    $_SERVER包含的信息比较多,这里就几个常见的拿出来讲解一下。

    1)SERVER_ADDR
    当前运行脚本所在的服务器的 IP 地址。(私有ip?)
    如:'SERVER_ADDR' => string '172. ... .20' (length=13)

    2)SERVER_NAME
    当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(获取域名或服务器ip)
    如:'SERVER_NAME' => string '47. ... .116' (length=14)
    还可以使用函数gethostbyname()获取服务器ip。

    3)SERVER_PORT
    Web 服务器使用的端口。默认值为 “80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。
    如:'SERVER_PORT' => string '80' (length=2)

    4)REQUEST_METHOD
    访问页面使用的请求方法;例如,“GET”, “HEAD”,“POST”,“PUT”。

    5)REQUEST_URI
    URI 用来指定要访问的页面。(获取当前域名的后缀,返回完整的路径,包含参数)
    如:'REQUEST_URI' => string '/demo12.php?aa=12345' (length=20)

    6)QUERY_STRING
    query string(查询字符串),如果有的话,通过它进行页面访问。
    如:'QUERY_STRING' => string 'aa=12345' (length=8)

    7)HTTP_ACCEPT
    当前请求头中 Accept: 项的内容,如果存在的话。
    如:'HTTP_ACCEPT' => string 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' (length=74)

    8)HTTP_HOST
    当前请求头中 Host: 项的内容,如果存在的话。(获取域名或服务器ip)
    如:'HTTP_HOST' => string '47. ... .116' (length=14)

    9)HTTP_REFERER
    引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。

    10)REMOTE_ADDR
    浏览当前页面的用户的 IP 地址。(客户端ip:有可能是用户的IP,也可能是代理的IP)
    如:'REMOTE_ADDR' => string '112.97.57.177' (length=13)

    11)SCRIPT_NAME
    包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。
    如:'SCRIPT_NAME' => string '/demo12.php' (length=11)

    12)SCRIPT_FILENAME
    当前执行脚本的绝对路径。
    如:'SCRIPT_FILENAME' => string '/var/www/html/demo12.php' (length=24)

    更多的参数请查看:http://php.net/manual/zh/reserved.variables.server.php

    3、$_GET

    通过 URL 参数传递给当前脚本的变量的数组。

    4、$_POST

    预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值。

    当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本。

    从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
    注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。

    5、$_FILES

    通过 HTTP POST 方式上传到当前脚本的项目的数组。

    $_FILES是一个二维数组,其内容主要有以下五项:

    1)$_FILES["userfile"]["error"]
    error总共有5个不同的返回值,其中0表示成功,另外4个表示在尝试中出现错误。

    • 0(UPLOAD_ERR_OK):没有错误发生,文件上传成功。
      UPLOAD_ERR_INI_SIZE
    • 1(UPLOAD_ERR_INI_SIZE):上传的文件超过了 php.ini 中upload_max_filesize 选项限制的值。
    • 2(UPLOAD_ERR_FORM_SIZE):上传文件的大小超过了 HTML 表单中MAX_FILE_SIZE 选项指定的值。
    • 3(UPLOAD_ERR_PARTIAL):文件只有部分被上传。
    • 4(UPLOAD_ERR_NO_FILE):没有文件被上传。
    • 5:上传文件大小为0。

    2)$_FILES["userfile"]["name"]
    name表示客户端机器上声明的文件最初的名字,包括扩展名。因此,如果浏览器一个名为test.png的文件,并通过表单上传,则此变量的值将是test.png。

    3)$_FILES["userfile"]["size"]
    size指定从客户端上传的文件的大小,以字节为单位。因此,在test.png文件的例子中,此函数可能赋值为5253,大约为5kb.

    4)$_FILES["userfile"]["tmp_name"]
    tmp_name指定上传到服务器后为文件赋予的临时名。这是存储在临时目录(由PHP指令upload_tmp_dir指定)中时所指定的文件名。

    5)$_FILES["userfile"]["type"]
    type指定从客户端上传的文件的mime类型。因此,在test.png文件的例子中,此变量会赋值为image/png。如果上传的是PDF,则赋值为application/pdf。因为这个变量有时会得到意外的结果,所以应当在脚本中显示地进行验证。

    6、$_COOKIE

    通过 HTTP Cookies 方式传递给当前脚本的变量的数组。

    7、$_SESSION

    当前脚本可用 SESSION 变量的数组。

    8、$_REQUEST

    默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。由于安全的问题,建议尽量避免使用$_REQUEST。

    9、$_ENV

    通过环境方式传递给当前脚本的变量的数组。

    这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。请查看你的 Shell 文档来获取定义的环境变量列表。

    其他环境变量包含了 CGI 变量,而不管 PHP 是以服务器模块还是 CGI 处理器的方式运行。

    三、经典案例

    1、用php写出显示客户端ip与服务器ip的代码

    $_SERVER["REMOTE_ADDR"]
    $_SERVER["SERVER_ADDR"]
    

    2、获取当前页面的完整URL

    echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    //Or:
    echo 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    //Or
    echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
    
    //若不确定是http还是https,还可以写成如下形式:
    echo $_SERVER['REQUEST_SCHEME']."//".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    

    参考

    官方手册:http://www.php.net/manual/zh/language.variables.superglobals.php

    相关文章

      网友评论

        本文标题:PHP强化之04 - 超全局数组

        本文链接:https://www.haomeiwen.com/subject/qhpocqtx.html