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"]."\n";
echo '$foo in current scope:'.$foo."\n";
}
$foo = "Example content";
test();
输出如下:
$foo in global scope: Example content
$foo in current scope: local variable
浏览器传输中文字符时候,会出现乱码,解决方法:
(a) 发送端的奇数中文加一个全角空格,然后到服务器接收,去掉两头的空行trim();
(b) 发送端的中文使用urlencode编码,服务器端使用urldecode解码;现在PHP会自动解码,但是在编程时候最好加上urldecode解码。
PHP中预定义超全局数组(变量)的更多相关文章
- PHP 预定义超全局数组/变量
1.超全局变量:不用定义声明即可用.PHP有九种 2.$_GET:通过参数传递给当前脚本的变量的数组 浏览器页面-->(http协议)->apache-->php module--& ...
- PHP中的预定义超全局数组
定义 超全局变量,是在全部作用域中始终可用的内置变量. PHP中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用. 在函数或方法中无需执行 global ...
- PHP学习1.5-预定义超全局数组变量
1.PHP 预定义的超全局变量数组 特性: a.特殊的数组,操作方式没有区别 b.不用声明,php脚本中默认存在,因为在php中不用定义,所以在自定义变量是应避免和预定的全局变量同名 c.在全局范围内 ...
- PHP开发——超全局数组变量
概述 l JS中的变量分两类:局部变量.全局变量. l PHP中的变量分三类:局部变量.全局变量.超全局变量. l 局部变量:在函数内部声明的变量,就是局部变量.函数执行完毕,局部变量就消失了. ...
- php超全局数组变量
(1)$_SERVER 服务器的相关信息 (2)$_GET 接收用户通过url向服务器传的参数 $POST 接收用户通过http协议向服务器传递的参数 发送get请求 <a href=&quo ...
- PHP基础-PHP中预定义的超全局数组
预定义数组: 自动全局变量---超全局数组 1. 包含了来自WEB服务器,客户端,运行环境和用户输入的数据 2. 这些数组比较特别 3. 全局范围内自动生效,都可以直接使用这些数组 4. 用户不能自定 ...
- php学习笔记 [预定义数组(超全局数组)]
<?php 预定义数组: * 自动全局变量---超全局数组 * * 1.包含了来自WEB服务器,客户端,运行环境和用户输入的数据 * 2.这些数组比较特别 * 3.全局范围内自动生效,都可以直 ...
- 【二十三】php之预定义超全局变量
php提供了九种预定义超全局变量: $_GET.$_POST.$_REQUEST.$_SERVER.$_ENV.$_FILE. $_COOKIE.$_SESSION. $GLOBALS 1.$_GET ...
- 2016/3/20 数组定义 数组遍历 超全局数组 数组元素设置(in_array() 、array_reverse()、count()、array_unique()、unset()、array_values、array_merge、array_push) 列表实例
一.数组定义 php数组与其他语言的数组的不同: 其他例如java语言 :同一种类型数据的集合. php:数组可以存储任何类型的数据.同一个数组中可以放int类型也可以放string类型 ①索引数组的 ...
随机推荐
- golang怎么使用redis,最基础的有效的方法
最近在学GO语言,我自己也喜欢使用redis,于是乎就顺便把go操作redis的方法也给学了,有个第三方包,在GitHub上面找的 go get github.com/alphazero/Go-Red ...
- 系统性能信息模块之psutil模块
一.psutil模块介绍 官方网址:https://pypi.org/ psutil模块安装:https://github.com/giampaolo/psutil/blob/master/INSTA ...
- Oracle VM VirtualBox 部署CS devcloud2 开发环境
Setting up (VirtualBox) 1. Get the new DevCloud 2.0 virtual appliance. The new image was created usi ...
- [Cookie] Read Cookie and Pass in headers
在同一个Suite里 import com.eviware.soapui.support.types.StringToStringMap def headers = testRunner.testCa ...
- Sed命令n,N,d,D,p,P,h,H,g,G,x解析3
摘自:https://blog.csdn.net/WMSOK/article/details/78463199 Sed命令n,N,d,D,p,P,h,H,g,G,x解析 2017年11月06日 23: ...
- [原创]COCOS2DX 3.8 增加protobuf为external库
此处为记录防止忘记,最近使用COCOS练习一些新的库,所以需要把PROTOBUF编译进去,看上去很麻烦,这里记录一下,以防忘记. 首先下载protobuf 2.5.0版本,下载地址请自行百度. 准备工 ...
- vue项目引入第三方js插件,单个js文件引入成功,使用该插件方法时报错(问题已解决)
1.引入第三方js文件,npm安装不了 2.控制台显示引入成功 3.在methods下使用 图片看不清请看下面代码 updateTime() { setInterval(()=>{ var cd ...
- Python2.7.9 编码问题
最近学一学网络爬虫,遇到第一件头疼的事情就是编码问题, 看了很多教程讲得不清楚, 现在整理一下,希望以后查看方便一些 使用 sys.getdefaultencoding() 查看Python的 ...
- Eclipse连接数据库
原创 操作数据库之前首先得连接数据库,连接数据库的步骤如下: 将驱动包导入JDK中 将sqljdbc4.jar(一个举例)类库文件拷贝到D:\Program Files\Java\jdk1.7.0\j ...
- 基于Qt5 跨平台应用开发
1.Qt简介 2.Qt 编程关键技术 2.1 信号与槽 2.2 Qt事件处理 3.Qt开发与实例分析 3.1 开发环境 3.2 系统实现基本框架 3.3 数据库管理 3.5 对Excel进行操作 4. ...