HTTP 和 HTTPS

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

  • http://example.com

  • http://example.com/file.php?var1=val1&var2=val2

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

  • https://example.com

  • https://example.com/file.php?var1=val1&var2=val2

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

容許通過 HTTP 1.0 使用 HTTP GET 方法對檔案/資源進行唯讀訪問。Host: 報頭也會通過請求傳送出去以支援基於功能變數名的虛擬主電腦。若果在 ini 檔案或是流上下文配置了 user_agent 字串,也會被內含在請求報頭中。

警示

當使用 SSL 時,Microsoft IIS 將違反協定不傳送 close_notify 旗標就關閉連線。PHP 將在到達資料尾端時報告 "SSL: Fatal Protocol Error"。要繞過此問題,應將 error_reporting 層級降低為不內含警示。PHP 4.3.7 及更高版本可以在當使用 https:// 封裝協定開啟流的時候檢驗出有此問題的 IIS 伺服器並抑制警示。若果使用 fsockopen() 來建立一個 ssl:// 套接字,則需要自己檢驗並抑制警示訊息。

自 PHP 4.0.5 起支援重定向。若果使用較早版本的 PHP 則需要在 URL 末尾內含一個斜線。若果一定要知道文件所在的資源的 url(在所有重定向被處理過之後),則需要處理從流返回的一系列響應報頭訊息。

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

$fp fopen($url'r');

/* 在 PHP 4.3.0 之前使用 $http_response_header
   而不是 stream_get_meta_data() */
$meta_data stream_get_meta_data($fp);
foreach(
$meta_data['wrapper_data'] as $response) {

  
/* 重導至何處? */
  
if (substr(strtolower($response), 018) == 'content-location: ') {
    
/* 把要重定向的連結賦值給 $url */
    
$url substr($response18);
  }
}
?>

流容許訪問資源的正文,報頭部分儲存在 $http_response_header 變量中。自 PHP 4.3.0 起,可以用 stream_get_meta_data() 得到報頭。

HTTP 連線是唯讀的,不能將資料寫入或是複製檔案到 HTTP 資源。

注: 自 PHP 4.3.0 起開始支援 HTTPS,需要在編譯時加入 OpenSSL 的支援。

表格 M-2. Wrapper Summary

屬性支援
受限於 allow_url_fopen
容許讀取
容許寫入
容許附加
容許同時讀寫無效
支援 stat()
支援 unlink()
支援 rename()
支援 mkdir()
支援 rmdir()

表格 M-3. 上下文選項

名稱用法預設值
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)。HTTPS 代理(通過 HTTP 代理伺服器)僅在 PHP 5.1.0 或更高版本可用。  
request_fulluri 設定為 TRUE 時,建立請求時整個 URI 將被使用。(即 GET http://www.example.com/path/to/file.html HTTP/1.0)。 而這是一個非標準請求格式,某些代理伺服器需要它。 FALSE
max_redirects 連續重定向的最大值。從 PHP 5.1.0 開始存在。 20

底層的套接字流(socket stream)上下文選項: 有可能通過底層傳輸(underlying transport)支援附加的上下文選項。對於 http:// 流,參考 tcp:// 傳輸的上下文選項。對於 https:// 流,參考 ssl:// 傳輸的上下文選項。