• 微信号
  • 微信号
目录

PHP基础

您当前的位置:首页 > 我的笔记 > PHP基础>php超全局变量

上一篇: php与Cookie技术

下一篇: php的执行过程

php超全局变量

超全局变量是指在*作用域中始终可用的内置变量。

php中的许多预定义变量都是超全局变量,这意味着它们在一个脚本的*作用域中都可用。在函数或方法中无须执行global $variable;语句就可以访问它们。

超全局变量

在php中一共有9个预定义超全局变量

变量名 功能描述
$_GET 经由php get方法提交至脚本的变量
$_POST 经由php post方法提交至脚本的变量
$_REQUEST 经由get、post和cookie机制提交至脚本的变量
$_SERVER 经由web服务器设定或者直接与当前脚本的执行环境相关联
$_ENV 执行环境提交至脚本的变量
$_FILES 经由php post文件上传而提交至脚本的变量
$_COOKIE 经由php cookies方法提交至脚本的变量
$_SESSION 当前注册给脚本会话的变量
$GLBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量

$_GET

在操作php脚本时,经常需要获取客户端提交的数据,对于get方式提交的数据,可以使用$_GET变量来获取,$_GET变量实际上是一个数组,它可以获取get方式提交表单的数据,也可以获取在url地址中的参数。

案例

<?php 
 //判断通过url传递的参数中是否有username 
 if(isset($_GET['username'])){ 
 $val=$_GET['username']; 
 echo "usernam=".$val; 
 }else { 
 echo "没有获取到username参数"; 
 } 
?>

在浏览器地址栏中输入:http://域名/文件地址?username=abc123,运行结果

需要注意的是,$_GET变量只能获取以get方式提交的便当的参数信息

$_POST

对于post方式提交的表单,在PHP中可以通过$_POST变量来获取,它是一个数组。数组中的每一个键对应表单中的一个元素。如,表单中包含一个name为“user”的文本输入框,则在使用post方式提交数据后,可以使用$_POST['usr']获取用户输入的数据

案例

<?php 
 header('content-type:text/html;charset=utf-8'); 
 if($_SERVER['REQUEST_METHOD']=='POST'){ 
 $name=$_POST['username']; 
 $sex=$_POST['sex']; 
 $hobby=$_POST['hobby']; 
 echo "姓名:".$name."<br>"; 
 echo "性别:".$sex."<br>"; 
 echo "爱好:"; 
 foreach($hobby as $key=>$val){ 
 echo $val; 
 } 
 exit; 
 } 
?> 
<form action="test.php" method="post" enctype="multipart/form-data"> 
 姓名:<input type="text" name="username"><br><br> 
 性别: 
 <input type="radio" name="sex" value="男">男 
 <input type="radio" name="sex" value="女">女 
 <input type="radio" name="sex" value="保密">保密<br><br> 
 爱好: 
 <input type="checkbox" name="hobby[]" value="运动">运动 
 <input type="checkbox" name="hobby[]" value="唱歌">唱歌 
 <input type="checkbox" name="hobby[]" value="游泳">游泳<br><br> 
 <input type="submit" value="提交"> 
</form> 

运行结果

点击提交后的,运行结果

$_REQUEST

在php开发中,如果需要通过一种方式同时获取$_GET、$_POST中的数据时,可以使用预定义超全局变量$_REQUEST,$_REQUEST是一个可以保存各种方式传递数据给php的数组变量,默认情况下包含$_GET、$_POST和$_COOKIE中的内容,也就是说通过$_REQUEST可以获取$_GET、$_POST和$_COOKIE的数据

案例

<?php 
 $a=$_REQUEST['a']; 
 $b=$_REQUEST['b']; 
 echo "<pre>"; 
 echo "a=".$a."<br>b=".$b; 
 echo "</pre>"; 
?>

在地址栏输入:http://域名/文件地址?a=10&b=22;运行结果

值得一提的是,$_GET、$_POST和$_COOKIE在$_REQUEST中出现的顺序依赖于php的配置文件php.ini中variables_order配置指令指定的顺序。默认情况下,php对预定义变量的解析顺序为$_ENV、$_GET、$_POST、$_COOKIE、$_SERVER,解析后新值会覆盖同名的旧值

注意:由于$_REQUEST中的变量是通过GET、POST和COOKIE输入机制传递给脚本文件,所以可以被远程用户篡改而降低*性,如,用户可以通过浏览器来修改url,所以在实际开发中,只有在不确定是GET请求还是POST请求的时候才会用到$_REQUEST

$_SERVER

在php程序中,如果需要在web服务器中保存交互信息,可以使用预定义超全局变量$_SERVER,它是由web服务器创建的信息数组,用于存放hiip请求头信息以及web服务器的信息,对于不同的web服务器,$_SERVER中包含的变量也会有所不同,常见的变量如下:

变量分类 变量名 变量说明
http请求头信息 HTTP_HOST web服务器的地址
HTTP_USER_AGENT 客户端操作系统和浏览器信息
HTTP_ACCEPT 当前HTTP请求的accept头部信息
HTTP_ACCEPT_LANGUAGE 当前HTTP请求的accept_language头部信息
HTTP_ACCEPT_ENCODING 当前HTTP请求的accept_encoding头部信息
HTTP_REFERER 链接到当前页面的前一页面的url地址
web服务器信息 SERVER_NAME web服务器的名字
SERVER_ADDR web服务器的IP地址
SERVER_PORT web服务器的端口号
REMOTE_ADDR 客户端的ip地址
DOCUMENT_ROOT web服务器中的应用代码存放位置
SERVE_ADMIN web服务器的管理账户
SCRIPT_FILENAME 当前访问的脚本文件的文件名
REMOTE_PORT 客户端的使用端口号
GATEWAY_INTERFACE 网关接口的信息
SERVER_PROTOCOL web服务器使用协议信息
REQUEST_METHOD 客户端发出的http请求中使用的方法
QUERY_STRING 客户端发出的http请求中的参数
REQUEST_URL url中的路径部分
SCRIPT_NAME 当前访问的脚本文件的相对路径
PHP_SELF 当前访问php脚本文件的相对路径
REQUEST_TIME 客户端发出http请求的时间

案例

<?php 
 echo "客户端的ip地址:".$_SERVER['REMOTE_ADDR']."<br>"; 
 echo "文件的存放位置:".$_SERVER['DOCUMENT_ROOT']."<br>"; 
 echo "web服务器的地址:".$_SERVER['HTTP_HOST']."<br>"; 
 echo "脚本文件名:".$_SERVER['SCRIPT_FILENAME']."<br>"; 
 echo "表单的请求方式:".$_SERVER['REQUEST_METHOD']."<br>"; 
?>

运行结果

$GLOBALS

超全局变量$GLOBALS是一个引用全局作用域中*可用变量的数组,变量名就是数组的键,通过键就可以获取对应的全局变量的值。

案例

<?php 
 function test(){ 
 $var1="局部变量 var1"; 
 echo "在当前范围内的:".$var1."<br>"; 
 echo "在全局范围内的:".$GLOBALS['var2']."<br>"; 
 } 
 $var2="全局变量 var2"; 
 test(); 
?>

运行结果

上一篇: php与Cookie技术

下一篇: php的执行过程