zoukankan      html  css  js  c++  java
  • PHP中预定义超全局数组(变量)

    PHP中许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。超全局变量除了具有全局变量特点外,在函数或方法中无需执行global $variable;就可以访问它们。

    提供超全局数组的原因是为了让程序员更方便快捷的写出PHP程序。

    PHP提供了九种超全局变量是:$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。

    1,$_GET:通过URL参数传递给当前脚本的变量的数组,apache的php模块将$_GET传递参数封装到$_GET数组中传递给相应的php页面。

    (1)$_GET实际使用情况:

    ① 客户机(浏览器)通过超链接传递信息给服务器;

       a1.php

    echo "<a href='a2.php?city=北京号&name=xiaoming'>传送数据</a>";
    

     a2.php

    var_dump($_GET);
    

     浏览器传输中文字符时候,会出现乱码,解决方法:

    (a) 发送端的奇数中文加一个全角空格,然后到服务器接收,去掉两头的空行trim();

    (b) 发送端的中文使用urlencode编码,服务器端使用urldecode解码;现在PHP会自动解码,但是在编程时候最好加上urldecode解码。

    a1.php

    $str = urlencode('北京号码');
    echo "<a href='a2.php?city=".$str."&name=xiaoming'>传送数据</a>";
    

    a2.php

    var_dump(urldecode($_GET['city']));
    

    ② 客户机(浏览器)通过表单传递信息给服务器;推荐使用$_POST方式传递表单参数。

    (2)判断$_GET参数是否为空,推荐使用empty判断,也可以使用isset()。

    (3)$_GET使用陷阱,在php.ini中register_globals = off,如果修改为on,则有注入的风险。

    b.php

    echo $name."---".$age;
    

    使用超链接访问b.php时候,在地址栏输入http://localhost/b.php?name=ada&age=12  ,b.php页面由于错误,无法正常显示,如果把register_globals开启,那么b.php页面则会正常显示,这样存在很大风险,所以不能开始register_globals。

    2,$_POST,apache的php模块将$_POST传递参数封装到$_POST数组中传递给相应的php页面。$_POST在传递中文时候,自动为你编码,在服务器端在自动解码,因此不会出现乱码情况。

    3,$_REQUEST

    定义:$_REQUEST中的变量通过GET、POST和COOKIE输入机制传递给脚本文件,$_REQUEST可以包括$_GET/$_POST/$_COOKIE数组,范围更大了。$_REQUEST可以被远程用户篡改而并不可信,因此这个不建议使用。之前当我们不知道数据是以那种方式传递过来数据时候,可以用$_REQUEST,现在这种情况下也可以不用$_REQUEST,比如如下代码:

    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        echo $_POST['名字'];
    }else if($_SERVER['REQUEST_METHOD'] == 'GET'){
        echo $_GET['名字'];
    }else if($_SERVER['REQUEST_METHOD'] == 'COOKIE'){
        echo $_COOKIE['名字'];
    }
    

      

    4,$_SERVER

    $_SERVER中主要包含了http请求行和消息头的信息,同时还有服务器自己的一些信息,比如DOCUMENT_ROOT,SCRIPT_FILENAME。

    5,$_ENV

    $_ENV在新版本PHP已经禁用,如果开启,需要修改php.ini的variables_order=”EGPCS”,但是在开发环境下不建议启用。

    6,$_FILE与文件上传相关,$_COOKIE与COOKIE相关,$_SESSION与SESSION相关。

    7,$GLOBALS

    引用全局作用域中可用的全部变量,包含了全部变量的全局组合数组。变量的名字就是数组的键,同时一个自定义的全局变量,也会自动的被$GLOBALS管理。示例如下:

    function test(){
        $foo = "local variable";
        echo '$foo in global scope:'.$GLOBALS["foo"]."
    ";
        echo '$foo in current scope:'.$foo."
    ";
    }
    $foo = "Example content";
    test();

    输出如下:

    $foo in global scope: Example content
    $foo in current scope: local variable

     浏览器传输中文字符时候,会出现乱码,解决方法:

    (a) 发送端的奇数中文加一个全角空格,然后到服务器接收,去掉两头的空行trim()
    (b) 发送端的中文使用urlencode编码,服务器端使用urldecode解码;现在PHP会自动解码,但是在编程时候最好加上urldecode解码。
  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/4917955.html
Copyright © 2011-2022 走看看