PHP

PHP官方文档

预定义变量

超全局变量

“Superglobal”,又称自动化的全局变量,在全部作用域中始终可用的内置变量,在函数或方法中无需执行 global $variable; 就可以访问它们。

$GLOBALS

一个包含了所有全局变量的全局组合数组,数组的键就是变量名。

与所有其他超全局变量不同,$GLOBALS在PHP中总是可用的。

<?php
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

$_SERVER

一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建,不能保证每个服务器都提供全部项目。 如果以命令行方式运行 PHP,下面列出的元素几乎没有有效的(或是没有任何实际意义的)。

  • PHP_SELF:当前执行脚本的文件名,与 document root 有关。如在地址为 http://example.com/foo/bar.php 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /foo/bar.php;
  • argv:传递给该脚本的参数的数组;
    • 当脚本以命令行方式运行时,argv 变量传递给程序 C 语言样式的命令行参数;
    • 当通过 GET 方式调用时,该变量包含query string。
  • argc:包含命令行模式下传递给该脚本的参数的数目;
  • GATEWAY_INTERFACE:服务器使用的 CGI 规范的版本,如 “CGI/1.1”;
  • SERVER_ADDR:当前运行脚本所在的服务器的 IP 地址;
  • SERVER_NAME:当前运行脚本所在的服务器的主机名;

    在 Apache 2 里,必须设置 UseCanonicalName = On 和 ServerName。否则该值会由客户端提供,就有可能被伪造。上下文有安全性要求的环境里,不应该依赖此值。

  • SERVER_SOFTWARE:服务器标识字符串,在响应请求时的头信息中给出;
  • SERVER_PROTOCOL:请求页面时通信协议的名称和版本,如 “HTTP/1.0”;
  • REQUEST_METHOD:访问页面使用的请求方法,“GET”, “HEAD”,“POST”,“PUT”;

    如果请求方法为 HEAD,PHP 脚本将在发送 Header 头信息之后终止。

  • REQUEST_TIME:请求开始时的时间戳;
  • REQUEST_TIME_FLOAT:请求开始时的时间戳,微秒级别的精准度;
  • QUERY_STRING:query string(查询字符串);
  • DOCUMENT_ROOT:当前运行脚本所在的文档根目录,在服务器配置文件中定义;
  • HTTP_ACCEPT:当前请求头中 Accept 项的内容;
  • HTTP_ACCEPT_CHARSET:当前请求头中 Accept-Charset 项的内容,如 “iso-8859-1,*,utf-8”;
  • HTTP_ACCEPT_ENCODING:当前请求头中 Accept-Encoding 项的内容,如 “gzip”;
  • HTTP_ACCEPT_LANGUAGE:当前请求头中 Accept-Language 项的内容,如 “en”;
  • HTTP_CONNECTION:当前请求头中 Connection 项的内容,如 “Keep-Alive”。
  • HTTP_HOST:当前请求头中 Host 项的内容;
  • HTTP_REFERER:引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定,并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。因此该值并不可信;
  • HTTP_USER_AGENT:当前请求头中 User-Agent 项的内容,包含了访问该页面的用户代理的信息,如Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)。
    • 还可以通过 get_browser() 来使用该值,从而定制页面输出以便适应用户代理的性能。
  • HTTPS:如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。

    注意当使用 IIS 上的 ISAPI 方式时,如果不是通过 HTTPS 协议被访问,这个值将为 off。

  • REMOTE_ADDR:浏览当前页面的用户的 IP 地址;
  • REMOTE_HOST:浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR;

    服务器必须被配置以便产生这个变量。例如在 Apache 中,需要在 httpd.conf 中设置 HostnameLookups On 来产生它。参见 gethostbyaddr()。

  • REMOTE_PORT:用户机器上连接到 Web 服务器所使用的端口号;
  • REMOTE_USER:经验证的用户;
  • REDIRECT_REMOTE_USER:验证的用户,如果请求已在内部重定向;
  • SCRIPT_FILENAME:当前执行脚本的绝对路径;

    如果在命令行界面(Command Line Interface, CLI)使用相对路径执行脚本,如 file.php 或 ../file.php,那么 $_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径。

  • SERVER_ADMIN:Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值;
  • SERVER_PORT:Web 服务器使用的端口,默认“80”,如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口;

    在 Apache 2 里,为了获取真实物理端口,必须设置 UseCanonicalName = On 以及 UseCanonicalPhysicalPort = On,否则此值可能被伪造。上下文有安全性要求的环境里,不应该依赖此值。

  • SERVER_SIGNATURE:服务器版本和虚拟主机名的字符串;
  • PATH_TRANSLATED:当前脚本所在文件系统(非文档根目录)的基本路径,这是在服务器进行虚拟到真实路径的映像后的结果;

    自 PHP 4.3.2 起,PATH_TRANSLATED 在 Apache 2 SAPI 模式下不再和 Apache 1 一样隐含赋值,而是若 Apache 不生成此值,PHP 便自己生成并将其值放入 SCRIPT_FILENAME 服务器常量中。这个修改遵守了 CGI 规范,PATH_TRANSLATED 仅在 PATH_INFO 被定义的条件下才存在。Apache 2 用户可以在 httpd.conf 中设置 AcceptPathInfo = On 来定义 PATH_INFO。

  • SCRIPT_NAME:当前脚本的路径,这在页面需要指向自己时非常有用;
    • __FILE__ 常量包含当前脚本(例如包含文件)的完整路径和文件名。
  • REQUEST_URI:要访问的页面,如 “/index.html?a=1&b=2”;
  • PHP_AUTH_DIGEST:当作为 Apache 模块运行时,进行 HTTP Digest 认证的过程中,此变量被设置成客户端发送的“Authorization” HTTP 头内容(以便作进一步的认证操作);
  • PHP_AUTH_USER:当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名;
  • PHP_AUTH_PW:当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码;
  • AUTH_TYPE:当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型;
  • PATH_INFO:包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息。例如如果当前脚本通过 URL http://www.example.com/php/path_info.php/some/stuff?foo=bar 被访问,那么 $_SERVER['PATH_INFO'] 将包含 /some/stuff。
<table border="1">
    <?php 
        foreach($_SERVER as $key=>$value){
            echo "<tr><td>".$key."</td><td>".$value."</td><tr>";
        }
     ?>
</table>

$_GET

通过 URL 参数传递给当前脚本的变量组成的关联数组。

<?php
    echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>

// http://example.com/?name=Hannes
// Hello Hannes!

$_POST

当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时,传递给当前脚本的所有变量组成的关联数组。

<?php
    echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!';
?>

// 通过 HTTP POST 方式传递了参数 name=Hannes
// Hello Hannes!

$_FILES

当 HTTP POST 请求的 Content-Type 是 multipart/form-data 时,上传到当前脚本的所有文件组成的关联数组。

<!-- The data encoding type, enctype, MUST be specified as below -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>
  • $_FILES['userfile']['name']:文件的原名称;
  • $_FILES['userfile']['type']:文件的 MIME 类型,如 “image/gif”。MIME 类型在 PHP 端并不检查,因此不一定会有这个值;
  • $_FILES['userfile']['size']:已上传文件的大小,单位字节;
  • $_FILES['userfile']['tmp_name']:文件被上传后在服务端储存的临时文件名;
  • $_FILES['userfile']['error']:和该文件上传相关的错误代码。
    • UPLOAD_ERR_OK,值为 0:没有错误,文件上传成功;
    • UPLOAD_ERR_INI_SIZE,值为 1:文件超过了 php.ini 中 upload_max_filesize 限制的值;
    • UPLOAD_ERR_FORM_SIZE,值为 2:文件超过了 HTML 表单中 MAX_FILE_SIZE 限制的值;
    • UPLOAD_ERR_PARTIAL,值为 3,文件只有部分被上传;
    • UPLOAD_ERR_NO_FILE,值为 4,没有文件被上传;
    • UPLOAD_ERR_NO_TMP_DIR,值为 6,找不到临时文件夹;
    • UPLOAD_ERR_CANT_WRITE,值为 7,文件写入失败。

文件被上传后,默认储存在服务端的默认临时目录中,除非 php.ini 中的 upload_tmp_dir 设置为其它的路径。

通过 HTTP Cookies 方式传递给当前脚本的变量组成的关联数组。

$_SESSION

当前脚本可用 SESSION 变量的数组。

$_REQUEST

默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的关联数组。

$_ENV

通过环境方式传递给当前脚本的变量组成的关联数组。

results matching ""

    No results matching ""