陈力:传智播客古代 珍宝币 泡泡龙游戏开发第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>
说明原理图:
$_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
代码:
代码:
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中预定义超全局变量
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第40讲:PHP中预定义超全局变量相关推荐
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法、数据类型(整型、布尔型、浮点型、字符串型)
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法.数据类型(整型.布尔型.浮点型.字符串型) PHP语法是什么样的,有哪些数据类型,有些什么变量.本文对PHP语法.数据类型(整型.布尔型 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术 php绘图坐标体系中,坐标原点位于左上角,以像素为单位.php绘图时,要创建画布.画出各种图形.输出图形.销毁图形(释放内存资源). ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数 什么是PHP函数,如何通过function定义一个函数,如何理解函数的调用过程.这些问题都是网站建设中经常遇到的程序设计问题.在进行网站 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组 PHP程序设计语言中的数组如何创建,一维数组的引用,PHP数组变量,foreach语句,如何对数组进行排序等等知识都是贵阳网站建设中的主 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组 在PHP程序设计语言中,如何创建二维数组呢,怎样使用二维数组,这些问题在网站建设中非常重要.二维数组的基本语法为: $a=array ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程 Xml是extensiable markup language的简称,包括文档声明.元素.属性.注释.CDATA区.特殊字符 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型 摘要:通过前节<第九讲:块元素.行内元素.标准流.盒子模型>学习了前节介绍了贵阳网站建设中的DIV+CSS中类选择器.i ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第38讲:PHP数据库编程mysql
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第38讲:PHP数据库编程mysql php程序设计语言为我们提供了mysql扩展库.mysqli扩展库.Pdo三种方式来操作mysql数据库.本文为贵阳网站 ...
最新文章
- rstudio 修改代码间距_Windows电脑使用Rstudio会有多少错误呢
- java crossdomin.xml_crossdomain.xml的配置详解
- c语言农夫过河游戏代码解释,农夫过河C++代码
- 【NLP】如何清理文本数据
- oracle v$ 表,【学习笔记】Oralce视图 查找分析V$PARAMETER视图的基表
- js中的cookie使用和vue-cookie的使用
- 机器学习算法--ALS
- 免费数学神器Mathpix发布移动版,一起来写更快的公式
- pytorch1.0神经网络保存、提取、加载
- Nodejs express、html5实现拖拽上传(转载)
- 3dm java32位_3DM游戏运行库合集安装包v2.3
- 利用高德制作GIS热力图
- Basler 工业相机与Python开发
- 单龙芯3A3000-7A1000PMON研究学习-(1)硬件原理图
- 电磁铁基础知识介绍及各系列性能比较
- C++ 重新定义继承而来的非虚函数
- 住宅IP和机房IP有什么区别,爬虫用哪种好?
- 鸿蒙四月几号升级啊,华为鸿蒙系统升级时间表 鸿蒙系统第二批升级时间是什么时候...
- 130个物联网示范项目上榜!工信部权威发布
- Ubuntu 18.04 与 Win10 双系统
热门文章
- 通配符证书配置Exchange2016 POP、IMAP加密模式
- win7 激活的两种方法
- 初玩SM2259XT2+B27A自制固态开卡成功,SM2259XT2量产工具和SM2258XT类似
- 从零开始搭建Cydia软件源+制作deb安装包
- 长安奔奔Mini维修手册
- 2020中国高校计算机大赛·华为云大数据挑战赛--热身赛 Rank7 思路及代码分享
- 人工智能机器人-智能时代的新纪元
- 嵌入式软件开发—— 应聘嵌入式软件工程师需要准备些什么?
- vi 跳到文件最后一行
- h5支付不能打开支付宝 ios_iOS 解决微信h5支付,支付宝h5支付无法直接返回APP的问题...