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解码。
  • 相关阅读:
    今日确定开源近两年来的EA程序
    升级了NinjaLoveFish Excel量化表格
    到家第一件事就是脱衣服
    对挑选完成的股票,进行批量建仓
    lua 学习之错误处理
    lua 学习之编译
    Lambda 演算入门
    lua学习之深入函数第二篇
    lua学习之深入函数第一篇
    lua学习之复习汇总篇
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/4917955.html
Copyright © 2011-2022 走看看