服务器变量: | $_SERVER |
环境变量: | $_ENV |
HTTP GET变量: | $_GET |
HTTP POST变量: | $_POST |
request变量: | $_REQUEST |
HTTP文件上传变量: | $_FILES |
HTTP Cookies: | $_COOKIE |
Session变量: | $_SESSION |
Global变量: | $_GLOBALS |
服务器变量: $_SERVER
$_SERVER 是一个包含诸如头信息(header)、路径(path)和脚本位置(script locations)的数组。数组的实体由 web 服务器创建。不能保证所有的服务器都能产生所有的信息;服务器可能忽略了一些信息,或者产生了一些未在下面列出的新的信息。这是一个自动全局变量。这只不过意味这它在所有的脚本中都有效。在函数或方法中不需要使用 global $_SERVER;
PHP_SELF :当前正在执行脚本的文件名
DOCUMENT_ROOT :当前运行脚本所在的文档根目录
REMOTE_ADDR :正在浏览当前页面用户的 IP 地址。
PHP_SELF :当前正在执行脚本的文件名
DOCUMENT_ROOT :当前运行脚本所在的文档根目录
REMOTE_ADDR :正在浏览当前页面用户的 IP 地址。
<?php
echo count($_SERVER);
foreach($_SERVER as $key=>$value)
echo "{$key}=>{$value}<br>";
输出:
33HTTP_HOST=>localhost //http服务器
HTTP_CONNECTION=>keep-alive
HTTP_ACCEPT=>text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
HTTP_USER_AGENT=>Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 //客户用的浏览器
HTTP_ACCEPT_ENCODING=>gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE=>zh-CN,zh;q=0.8
PATH=>C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\Lenovo\Lenovo Home\;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\MySQL\MySQL Server 5.5\bin;
SystemRoot=>C:\WINDOWS
COMSPEC=>C:\WINDOWS\system32\cmd.exe
PATHEXT=>.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
WINDIR=>C:\WINDOWS
SERVER_SIGNATURE=> <address style="font-family:Simsun;font-size:14px;">Apache/2.4.9 (Win32) PHP/5.5.12 Server at localhost Port 80</address>
SERVER_SOFTWARE=>Apache/2.4.9 (Win32) PHP/5.5.12
SERVER_NAME=>localhost 服务器名称
SERVER_ADDR=>::1 服务器地址
SERVER_PORT=>80 服务器端口
REMOTE_ADDR=>::1 客户地址
DOCUMENT_ROOT=>C:/wamp/www/ 文档根目录
REQUEST_SCHEME=>http
CONTEXT_PREFIX=>
CONTEXT_DOCUMENT_ROOT=>C:/wamp/www/
SERVER_ADMIN=>admin@example.com
SCRIPT_FILENAME=>C:/wamp/www/array/arr1.php
REMOTE_PORT=>21721
GATEWAY_INTERFACE=>CGI/1.1
SERVER_PROTOCOL=>HTTP/1.1 服务器协议
REQUEST_METHOD=>GET
QUERY_STRING=>
REQUEST_URI=>/array/arr1.php 经常用
SCRIPT_NAME=>/array/arr1.php
PHP_SELF=>/array/arr1.php
REQUEST_TIME_FLOAT=>1452865977.555
REQUEST_TIME=>1452865977
HTTP_CONNECTION=>keep-alive
HTTP_ACCEPT=>text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
HTTP_USER_AGENT=>Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 //客户用的浏览器
HTTP_ACCEPT_ENCODING=>gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE=>zh-CN,zh;q=0.8
PATH=>C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\Lenovo\Lenovo Home\;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\MySQL\MySQL Server 5.5\bin;
SystemRoot=>C:\WINDOWS
COMSPEC=>C:\WINDOWS\system32\cmd.exe
PATHEXT=>.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
WINDIR=>C:\WINDOWS
SERVER_SIGNATURE=> <address style="font-family:Simsun;font-size:14px;">Apache/2.4.9 (Win32) PHP/5.5.12 Server at localhost Port 80</address>
SERVER_SOFTWARE=>Apache/2.4.9 (Win32) PHP/5.5.12
SERVER_NAME=>localhost 服务器名称
SERVER_ADDR=>::1 服务器地址
SERVER_PORT=>80 服务器端口
REMOTE_ADDR=>::1 客户地址
DOCUMENT_ROOT=>C:/wamp/www/ 文档根目录
REQUEST_SCHEME=>http
CONTEXT_PREFIX=>
CONTEXT_DOCUMENT_ROOT=>C:/wamp/www/
SERVER_ADMIN=>admin@example.com
SCRIPT_FILENAME=>C:/wamp/www/array/arr1.php
REMOTE_PORT=>21721
GATEWAY_INTERFACE=>CGI/1.1
SERVER_PROTOCOL=>HTTP/1.1 服务器协议
REQUEST_METHOD=>GET
QUERY_STRING=>
REQUEST_URI=>/array/arr1.php 经常用
SCRIPT_NAME=>/array/arr1.php
PHP_SELF=>/array/arr1.php
REQUEST_TIME_FLOAT=>1452865977.555
REQUEST_TIME=>1452865977
网址改成:http://localhost/array/arr1.php/user/add 则多了:
PATH_INFO=>/user/add
PATH_TRANSLATED=>C:\wamp\www\user\add
PATH_TRANSLATED=>C:\wamp\www\user\add
用此数组可以获取ip:
<?php
function getip(){
return $_SERVER['REMOTE_ADDR'];
}
echo getip();
但是会获取到好多==面试也不应该这么说
正规写法:
<?php
function getip(){
if(!empty($_SERVER['HTTP_CLIENT_IP']))
return $_SERVER['HTTP_CLIENT_IP'];
if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']
return $_SERVER['HTTP_X_FORWARDED_FOR'];
if(!empty($_SERVER['REMOTE_ADDR']
return $_SERVER['REMOTE_ADDR'];
return 'unknown';
}
echo getip();
环境变量:$_ENV 用的不多==
在解析器运行时,这些变量从环境变量转变为 PHP 全局变量名称空间(namespace)。它们中的许多都是由 PHP 所运行的系统决定。完整的列表是不可能的。请查看系统的文档以确定其特定的环境变量。
这是一个自动全局变量。它在所有的脚本中都有效。在函数或方法中不需要使用 global $_ENV;
这是一个自动全局变量。它在所有的脚本中都有效。在函数或方法中不需要使用 global $_ENV;
$_GET 明文 不能用作密码 长度受限
通过 HTTP GET 方法传递的变量组成的数组。是自动全局变量.
http://localhost/login.php?name=zhangsan&id=100
<?php
echo “参数name的值:”.$_GET[“name”]; //zhangsan
echo “参数id的值:”.$_GET[“id”]; //100
?>
http://localhost/login.php?name=zhangsan&id=100
<?php
echo “参数name的值:”.$_GET[“name”]; //zhangsan
echo “参数id的值:”.$_GET[“id”]; //100
?>
arr3.php:前面没有<?php!!!
<a href="demo.php?action=add&&id=5">测试界面</a>
demo.php <?php
print_r($_GET);//括号()能写成【】,你咋想的啊??
$_POST
通过 HTTP POST 方法传递的变量组成的数组。是自动全局变量。
与$_GET相似,只是方法不一样。而且长度不受限制
与$_GET相似,只是方法不一样。而且长度不受限制
综合一点的案例
demo.php
<?php
print_r($_GET);
echo '<br>';
print_r($_POST);
arr3.php
<a href="demo.php?action=add&id=5">测试界面</a>
<form action="demo.php" method="get">
usename:<input type="text" name="name" /><br>
age:<input type="text" name="name" /><br>
<input type="submit" name="sub" value="提交">
</form>
里面的method改了提交方式,输出就改啦,是不是很神奇~
$_REQUEST
此关联数组包含 $_GET,$_POST 和 $_COOKIE 中的全部内容。所有请求哟~不过不建议使用,不安全
宁可自己先测试:
$arr=!empty($_POST)?$_POST:$_GET;
在php4.x的版本中不要用全局变量做函数形参
亦可以用数组接收参数
<a href="demo.php?action[]=add&action[]=mod&id=5&name=admin">测试页面</a>
<form action="demo.php?age=www&dd=yy" method="post">
username: <input type="text" name="name[one]" /><br>
username: <input type="text" name="name[two]" /><br>
username: <input type="text" name="name[three]" /><br>
age: <input type="text" name="age" /> <br>
sex: <input type="text" name="sex" /> <br>
<input type="submit" name ="sub" value="提交">
</form>
$_FILES
通过 HTTP POST 方法传递的已上传文件项目组成的数组。是自动全局变量。
$_COOKIE
通过 HTTP cookies 传递的变量组成的数组。是自动全局变量。以后细讲
<?php
setCookie("name","MissZhou",time()+3000,"/");
print_r($_COOKIE);
$_SESSION
包含当前脚本中 session 变量的数组。参阅 Session 函数文档以获得更多信息。$GLOBALS
由所有已定义全局变量组成的数组。变量名就是该数组的索引。 包含以上所有,且没有全称~
register_globals=ON时表单里面的元素名就可以直接用了,所以会名字会发生冲突~~而且get post名字傻傻分不清,更是涉及安全问题~
所以新版本中没有了,register_globals在我的版本中找不到啊~