php预定义超全局数组
php预定义超全局变量
- 超全局变量是在全部作用域中始终可用的内置变量。
- 全局变量
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
$num=10; //全局变量
function get(){
//$num=20; //局部变量
//在函数中使用全局变量
global $num;
$num=20;
}
get();
echo $num;
?>
</body>
</html>
- 超全局变量一是有全局变量的特性,而是无须声明直接使用。(系统创建及维护)
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
$_SERVER['aa']=1253;//也可以当数组来使用,注意!!!
echo "<pre>";
echo print_r($_SERVER);
echo "</pre>";
?>
</body>
</html>
-
每请求一次,创建一个超全局变量。
-
预定义超全局变量有以下九种
- $_GET
- $_POST
- $_REQUEST
- $_SERVER
- $_ENV
- $_FILES
- $_COOKIE
- $_SESSION
- $GLOBALS
$_GET
- 原理
- 使用一:浏览器通过超链接传送信息给服务器(默认是GET)
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
//注意:信息如何传递!!!
<a href="1.php?city=XI'AN&name=tan">数据</a>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
echo "<pre>";
echo print_r($_GET);
echo "</pre>";
echo $_GET['name'];
?>
</body>
</html>
- 注意:IE5.5和IE6存在中文奇数乱码的问题,解决?urlencode和urldecode。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
$city=urlencode("大西安");
echo "<a href='1.php?city={$city}&name=tan'>数据</a>";
?>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
echo "<pre>";
echo print_r($_GET);
echo "</pre>";
echo urldecode($_GET['city']);
?>
</body>
</html>
- 使用二:浏览器通过表单传送信息给服务器(最好使用$_POST)
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<form action='1.php' method='GET'>
输入内容:<input type='text' name='ha'/>
<input type='submit' name='查询'/>
</form>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
echo $_GET['ha'];
?>
</body>
</html>
- 禁止启用register_globals:设置register_globals=off;
- 启用register_globals,以下代码访问时若输入http://localhost:88/1.php?a=10&b=20;将得到10 20。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
echo $a." ".$b;
?>
</body>
</html>
$_POST
- 通过post方式提交的数据,会被封装到$_POST超全局数组中。
- 使用一:浏览器通过表单传送信息给服务器(有些数据必须使用post方式)
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<form action='1.php' method='POST'>
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
性别:<input type="radio" name="sex" value="woman">女</input><input type="radio" name="sex" value="man">男</input><br/>
籍贯:<select name="city">
<option value="西安">西安</option>
<option value="北京">北京</option>
<option value="哈尔滨">哈尔滨</option>
</select>
<br/>
爱好:<input type="checkbox" name="hobby[]" value="唱歌">唱歌</input>
<input type="checkbox" name="hobby[]" value="跳舞">跳舞</input>
<input type="checkbox" name="hobby[]" value="LOL">LOL</input><br/>
个人简介:<textarea rows="10" cols="10" name="introduce"></textarea><br>
文件上传:<input type="file" name="files"></input><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
echo "<pre>";
//如何接收checkbox的所有数据(注意中括号[]):<input type="checkbox" name="hobby[]" value="唱歌">唱歌</input>
echo print_r($_POST);
echo "</pre>";
$hobbies=$_POST['hobby'];
foreach($hobbies as $key=>$val){
echo "<br/>".$key." ".$val;
}
?>
</body>
</html>
-
POST方式和GET方式的区别
- POST方式安全性好
- 数据传输大小(POST方式大)
- 保存到收藏夹(GET方式)
$_REQUEST
- $_REQUEST包含$_GET、$_POST、$_COOKIE数组的信息。
- 注意不要经常使用$_REQUEST(因为将多个信息混合)。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<a href="1.php?name='tan'">超链接</a>
<form action='1.php' method='POST'>
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
echo $_REQUEST['name'];
echo $_REQUEST['username'];
?>
</body>
</html>
- 通过$_SERVER[‘REQUEST_METHOD’]区分GET和POST
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
if($_SERVER['REQUEST_METHOD']=="GET"){
echo $_REQUEST['name'];
}else if($_SERVER['REQUEST_METHOD']=="POST"){
echo $_REQUEST['username'];
}
?>
</body>
</html>
$_SERVER
- $_SERVER主要包含了http请求行和消息头的信息,同时还有服务器的一些信息(DOCUMENT_ROOT,SCRIPT_FILENAME…)。
$_ENV
- 获取服务器端的环境变量,通过修改php.ini的variables_order="EGPCS"启动。
$GLOBALS
- 包含了全部变量的全局组合数组。
- 当定义一个全局变量,也会被$GLOBALS管理。
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
$a=100;
echo "<pre>";
print_r($GLOBALS);
echo "</pre>";
?>
</body>
</html>