陈力:传智播客古代 珍宝币 泡泡龙游戏开发第40讲:PHP中预定义超全局变量

陈力:传智播客古代 珍宝币 泡泡龙游戏开发第40讲:PHP中预定义超全局变量

    超全局变量是在全部作用域中始终可用的内置变量。PHP 中的许多预定义变量都是“超全局的”。PHP供提供了九种:$_GET、$_POST、$_REQUEST、$_SERVER、$_ENV、$_FILE、$_COOKIE、$_SESSION、$GLOBALS。本文结合贵阳网站建设的实践经验对这些知识进行介绍。

一、PHP中预定义超全局变量
<?php
 $a=23;//全局变量,因为该变量在整个作用域(在这个php文件中),都是可见 
 function test(){
  //如果希望使用到全局$a;
  global $a;
  $a=45;
 }
 test();
 echo $a;
?>

什么是超全局变量?
    超全局变量除了有全局变量的特点外,可以无须申明,直接使用。超全局变量是在全部作用域中始终可用的内置变量。PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 来访问它们。 
    PHP设计者提供这些超全局数组的目的是为了让PHP程序员可以更方便快捷的编写程序。

快速入门
 //超全局变量
 $_SERVER['user']="王五";
 echo "<pre>";
 echo print_r($_SERVER);
 echo "</pre>"
提供超全局数组的原因是为了让程序员更方便快捷的写出PHP程序。
PHP供提供了九种:$_GET、$_POST、$_REQUEST、$_SERVER、$_ENV、$_FILE、$_COOKIE、$_SESSION、$GLOBALS。

二、$_GET
$_GET : 通过 URL 参数传递给当前脚本的变量的数组。 
客户机(浏览器)通过超链接传送信息给服务器,客户机(浏览器)通过表单传送信息给服务器。
<a href="b.php?city=beijing">传递数据</a>
<a href="b.php?city=北京早">传递数据</a>

说明原理图:

软件设计,PHP教程,贵阳网站建设


$_GET 实际使用,客户机(浏览器)通过超链接传送信息给服务器。

案例:
test.php页面
<?php
 echo "<a href='a.php?city=北京好&name=xiaoming'>传送数据</a>";
?>
a.php页面
<?php
 echo "<pre>";
 echo print_r($_GET);
 echo "</pre>";
 //如果希望指定取出某个数据,则可以通过下标名
 echo $_GET['name'];
?>
看看ie5.5 和 ie 6的中文奇数乱码.

解决方法1.
给奇数中文加一个全角空格,然后到服务器接收是,去掉两头的空行 trim()
解决方法2:
使用urlencode 和 urldecode函数

在test.php页面
<?php
 //这句话是对中文url编码. 
 $str=urlencode("北京好");
 echo "<a href='a.php?city=".$str."&name=xiaoming'>传送数据</a>";
?>
//在a.php 页面中,正常接收。

<?php
 echo "<pre>";
 echo print_r($_GET);
 echo "</pre>";
 //如果希望指定取出某个数据,则可以通过下标名,如果php版本低,可能看到是中文,需要使用 urldecode() 来解密
 echo "--".$_GET['city'];
?>

_GET也可以接收表单以get方式提交数据
<form action=”a.php” method=”get”>
//....
</from>

特别说明如何提交表单数据建议使用POST,不要使用GET

使用细节: 
如果判断是否收到值:
a. php
 if(empty($_GET['city'])){
  echo "没有收到";
 }else{
  echo "有city";
  echo $_GET['city'];
 }

//这个方法可以,参看,建议使用empty
if(!isset($_GET['city'])){
  echo "没有收到hello";
 }else{
  echo "有city";
  echo $_GET['city'];
 }

绝对不要启用register_globals   需要 register_globals = Off


三、$_POST
    描述 : 通过Http POST 方式提交的数据,会被封装到$_POST超全局数组中。
    $_POST : 通过 HTTP POST 方法传递给当前脚本的变量的数组。
    客户机(浏览器)通过表单传送信息给服务器并且需要使用post方式。
    有些数据的提交必须使用post,比如上传文件。

举例: 接收表单信息:
各种表单输入项数据的获取
text、password、radio、checkbox、file、select、textarea、hidden、image、button 
代码:

软件设计,贵阳网站建设,PHP教程


代码:
register1.php页面
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<h1>用户注册</h1>
<form action="register2.php" method="post">
用户名:<input type="text" name="username"/><br/>
密码<input type="password" name="passwd"/><br/>
性别:<input type="radio" name="sex"  value="female" />女 <input type="radio" name="sex"  value="male" />男<br/>
你喜欢什么:
<input type="checkbox" name="hobby[]" value="唱歌">唱歌
<input type="checkbox" name="hobby[]" value="跳舞">跳舞
<input type="checkbox" name="hobby[]" value="游泳">游泳
<input type="checkbox" name="hobby[]" value="骑马">骑马
<br/>
你的所在地是:
<select name="city">
<option value="beijing">北京</option>
<option value="tianjing">天津</option>
<option value="nanjing">南京</option>
</select>
<br/>
个人介绍 :
<textarea rows="10" name="intro" cols="30">
</textarea><br/>
你选择图片<input type="file" name="myphoto"/><br/>
<input type="submit" value="提交"/>
</form>
</html>

**regiseter2.php***
<?php
 //看看如何接收
 echo "<pre>";
 echo print_r($_POST);
 echo "</pre>";
 //关心爱好
 $name=$_POST['username'];
 $pwd=$_POST['passwd'];
 //如何接收checkbox提交的数据
 $hobbies=$_POST['hobby'];
 echo "个人信息如下<br/>";
 echo "$name--$pwd";
 //print_r($hobbies);
 echo "该人的爱好";
 foreach($hobbies as $key=>$val){
  echo "<br/>$key=$val";
 }
 echo "<br/>你的所在地是";
 $city=$_POST['city'];
 echo $city;
 echo "<br/>个人介绍如下";
 $intro=$_POST['intro'];
 echo "<br/>$intro";
 echo "<a href='#'>查看调查情况</a>"
?>

扩展案例:编写生活幸福度的调查表,然后把调查的信息,存入到数据库.,看看能否获取数据,显示给用户看。

get数据提交主要是
<a></a>   默认是get提交。
<?php
 //当这样的方式跳转的时候,也是以get方式提交给ok.php
 header(“Location: ok.php?aaa=xiaoming”);
?>

post和get区别:
① 安全性  post>get
② 数据传输大小 [浏览器] post>get
③ 保存到收藏夹 get比较方便。


四、$_REQUST
    定义:$_REQUST中可以包括$_GET/$POST/$_COOKIE数组的信息。换一句话说: 就是$_REQUEST超全局数组中,可以获取 get/post/cookie数据。
快速入门:
这里就很好理解,看一个案例 :
<?php
 echo "<pre>";
 echo print_r($_REQUEST);
 echo "</pre>";
 //如何取出某个值
 //$_REQUEST既可以接收get  请求数据,也可以接收post请求、cookie..
 //所以这个变量,比较不可以信,不建议使用. $_GET $_POST
 echo $_REQUEST['aa'];
 //如果不确定get/post
 if($_SERVER['http_method']=="post"){
  $echo $_POST['名字'];
 }else if($_SERVER['http_method']=="get"){
  //用 _GET接收.
 }
?>
注意: 由于 $_REQUEST 中的变量通GET,POST 和 COOKIE 输入机制传递给脚本文件,因此可以被远程用户篡改而并不可信。

注意事项:不要经常使用$_REQUEST,如果不确定_GET/POST,你接收数据时候,可以这样:
if($_SERVER[' REQUEST_METHOD’]=="POST"){
  $echo $_POST['名字'];
 }else if($_SERVER[’ REQUEST_METHOD’]=="GET"){
  //用 _GET接收.
 }


五、$_SERVER
 $_SERVER中主要包含了Http请求行和消息头的信息,同时还有服务器自己的一些信息,比如DOCUMENT_ROOT, SCRIPT_FILENAME ..
<?php
 echo "<pre>";
 print_r($_SERVER);
 echo "</pre>";
?> 
案例说明:
1. 请获取请求该页面的客户机的ip地址:$_SERVER['REMOTE_ADDR ']
2. 请显示服务器端apache的版本号和php版本号:$_SERVER['???']
3. 请根据$_SERVER的REQUEST_METHOD  来决定使用_GET还是_POST方法接收数据。
4. 请利用$_SERVER 的HTTP_REFERER 来防止盗链行为。

六、$_ENV
    该全局数组可以获取环境变量,在php5.3中默认禁用,但是你可以启动,在php.ini文件中启用。
    在php5.3.5中,默认情况下不能使用$_ENV 你会得到空值,这是出于对安全的考虑。如果希望使用$_ENV可以通过 修改php.ini 的variables_order = "EGPCS" [EGPCS含义]。但是在开发和生产环境,我们不建议这样配置。
variables_order = "EGPCS"
<?php
 echo "<pre>";
 print_r($_ENV);
 echo "</pre>";
?>

七、$_FILE / $_COOKIE /$_SESSION
$_FILE与文件上传相关
$_COOKIE与COOKIE 相关
$_SESSION与SESSION相关
这几个超全局数组功能强大,在后面详细介绍。

八、$GLOBALS
包含了全部变量的全局组合数组。变量的名字就是数组的键[手册]。
同时一个自定义的全局变量,也会自动的被$_GLOBALS 管理。

案例:
<?php
 echo "aaaa";
 echo "<pre>";
 echo print_r($GLOBALS);
 echo "</pre>";
?>

当你定义一个全局变量,该变量也会被$GLOBALS管理。
<?php
 $a=900;
 echo “<pre>”;
 print_r($GLOBALS);
 echo “</pre>”
?>
<?php
function test() {
    $foo = "local variable";
    echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>

【推荐阅读】陈力:传智播客古代 珍宝币 泡泡龙游戏开发第40讲:PHP中预定义超全局变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值