附录 J. 支持的协议/封装协议列表

以下是 PHP 内置用于文件系统函数例如 fopen()copy() 的 URL 风格协议列表。除了这些封装协议之外,从 PHP 4.3 起,你还可以用 PHP 脚本和 stream_wrapper_register() 写自己的封装协议。

HTTP 和 HTTPS

PHP 3,PHP 4。自 PHP 4.3.0 起支持 https://

  • http://example.com

  • http://user:password@example.com

  • https://example.com

  • https://user:password@example.com

允许通过 HTTP 1.0 使用 HTTP GET 方法对文件/资源进行只读访问。Host: 报头也会通过请求发送出去以支持基于域名的虚拟主机。如果你在 ini 文件或者流上下文配置了 user_agent 字符串,也会被包括在请求报头中。

自 PHP 4.0.5 起支持重定向。如果使用较早版本的 PHP 则需要在 URL 末尾包括一个斜线。如果一定要知道文档所在的资源的 url(在所有重定向被处理过之后),则需要处理从流返回的一系列响应报头信息。

<?php
$url
= 'http://www.example.com/redirecting_page.php';

$fp = fopen($url, 'r');

/* Prior to PHP 4.3.0 use $http_response_header
   instead of stream_get_meta_data() */
foreach(stream_get_meta_data($fp) as $response) {

  
/* Were we redirected? */
  
if (substr(strtolower($response), 0, 10) == 'location: ') {
    
/* update $url with where we were redirected to */
    
$url = substr($response, 10);
  }

}

?>

流允许访问资源的正文,报头部分保存在 $http_response_header 变量中。自 PHP 4.3.0 起,可以用 stream_get_meta_data() 得到报头。

HTTP 连接是只读的,不能将数据写入或者拷贝文件到 HTTP 资源。

注: PHP 4.3.0 起开始支持 HTTPS,需要在编译时加入 OpenSSL 的支持。

表格 J-1. Wrapper Summary

属性支持
allow_url_fopen 限制Yes
Allows ReadingYes
Allows WritingNo
Allows AppendingNo
Allows Simultaneous Reading and WritingN/A
Supports stat()No
Supports unlink()No

表格 J-2. 上下文选项(context options,自 PHP 5.0.0 起)

名称用法默认值
methodGETPOST 或任何其它被远程服务器支持的 HTTP 方式。GET
header 请求中要发送的附加的头信息。此选项中的值将覆盖其它值(例如 User-agent:Host:Authentication:)。  
user_agent 在 User-Agent: 头信息中要发送的值。此值仅用于没有在上面 header 的上下文选项中指定 user-agent 时。 php.ini 设置:user_agent
content 头信息之后要发送的附加数据。典型用于 POST 或 PUT 请求。  
proxy 以 URI 格式指定的代理服务器(例如 tcp://proxy.example.com:5100)。  

底层的套接字流(socket stream)上下文选项: 有可能通过底层传输(underlying transport)支持附加的上下文选项。对于 http:// 流,参考 tcp:// 传输的上下文选项。对于 https:// 流,参考 ssl:// 传输的上下文选项。