对于全部脚本而言,PHP提供大量的预定义变量。这些变量将所有的外部变量(例如表单提交过来的get,post)表示内部环境变量,并将错误信息表示返回头。
超全局变量(数组)
超全局变量是在全部作用域中始终可用的内置变量。这意味着无需在函数或者方法中使用global(全局),就可以去访问他们。默认情况下所有的超全局变量都是可用的,例如$_POST['username']这种形式。另外php.ini文件里面有一个register_globals配置选择项,默认是off,一般不建议开启。如果开启后则$_POST['username']超全局变量可以用$username表示,也就是预定义数组下标和变量名一样,这样不太安全,因此一般都是禁用这种方法的。
【1】$GLOBALS
引用全局作用域中可用的全部变量 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
//globals
function foo(){
$foo = 'local var';
echo '$foo in global scope:'.$GLOBALS['foo'].'<br/>';
echo '$foo in current scope:'.$foo;
}
$foo = 'AAA';//全局的foo 会影响$GLOBALS['foo']
foo();
【2】$_SERVER
$_SERVER是一个包含诸如头信息,路径,脚本位置的数组。由web服务器创建,并不能保证所有的服务器都能产生所有的信息,服务器可能会忽略一些信息,或者产生了一些其他的信息,和其他的超全局数组一样。它是一个自动的全局变量,对所有的脚本中都有效。
可以打印看一下自己web一些信息
变量 | 含义 |
---|---|
SERVER_ADDR | 服务端ip |
SERVER_NAME | 服务器名 |
SERVER_PORT | 服务器端口号 |
SERVER_SOFTWARE | 服务器标识字符串,在响应请求时的头信息中给出 |
HTTP_REFERER | 引导用户代理到当前页的前一页的地址(如果存在) |
HTTP_USER_AGENT | 当前请求头中 User-Agent: 项的内容 |
QUERY_STRING | ?后面的参数(例如id=1) |
PATH_INFO | 跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息 |
REQUEST_METHOD | 访问页面使用的请求方法(例如get post) |
REQUEST_TIME | 请求开始时的时间戳 |
REQUEST_URI | 指定访问的页面 |
【3】$_GET
通过 URL 参数传递给当前脚本的变量的数组,是通过urldecode()经过解码传递的,解码给出的已编码字符串中的任何 %##。 加号('+')被解码成一个空格字符,#后面的字符不会传过去。传过去的值默认都是字符串类型。也可以通过method=get的表单进行提交。
var_dump($_GET['id']);
//假设用户访问的是 http://localhost/test.php?id=123@$%!.#aaa
//则会输出string '123@$%!.' (length=8)
【4】$_POST
当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,会将变量以关联数组形式传入当前脚本。可以通过mothod=post的表单进行提交。
【5】$_FILES
通过 HTTP POST 方式上传到当前脚本的项目的数组。通过mothod=post上传文件,必须要设置enctype="multipart/form-data"
【6】$_COOKIE
通过 HTTP Cookies 方式传递给当前脚本的变量的数组。通常这些Cookies是php脚本通过setcookie()函数设置到用户客户端浏览器中的,这样之后就可以通过访问$_COOKIE这个超全局变量访问到。
【7】$_REQUEST
默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。但是速度较慢,不推荐使用,而且可以被远程用户篡改并不可信。
【8】$_SESSION
当前脚本可用 SESSION 变量的数组。在会话控制中,服务端利用session来跟踪用户,判断是否登陆。使用前需要在php文件中使用session_start()函数开启Session,然后就可以使用$_SESSION数组注册全局变量。用户就可以在整个网站用访问到这些会话信息。
【9】$_ENV
通过环境方式传递给当前脚本的变量的数组。这些变量被从 PHP 解析器的运行环境导入到 PHP 的全局命名空间。很多是由支持 PHP 运行的 Shell 提供的,并且不同的系统很可能运行着不同种类的 Shell,所以不可能有一份确定的列表。
其他预定义变量
【1】$php_errormsg
表示前一个错误信息,如果没有错误,则未定义。
echo $php_errormsg;//报未定义
echo $php_errormsg;//输出Undefined variable: php_errormsg
【2】$http_response_header
$http_response_header 数组与 get_headers() 函数类似。当使用HTTP 包装器时,$http_response_header 将会被 HTTP 响应头信息填充。$http_response_header 将被创建于局部作用域中。可以获取到一些服务器的信息。
function get_contents() {
file_get_contents("http://www.tacks.xyz");
var_dump($http_response_header);
}
get_contents();
【3】$argc和$argv
$argc传递给脚本的参数数目。$argv — 传递给脚本的参数数组。通常运行与命令行下,传递脚本的参数。