測試代碼如下:
復制代碼 代碼如下:
<?php
$fp=fopen("http://www.sina.com.cn", 'r');
$stream_meta = stream_get_meta_data($fp);
print_r($stream_meta);
?>
在我本機輸出如下:
Array
(
[wrapper_data] => Array
(
[0] => HTTP/1.0 200 OK
[1] => Date: Tue, 06 Dec 2011 10:08:11 GMT
[2] => Server: Apache
[3] => Last-Modified: Tue, 06 Dec 2011 10:07:12 GMT
[4] => Accept-Ranges: bytes
[5] => X-Powered-By: mod_xlayout/rc2
[6] => Cache-Control: max-age=60
[7] => Expires: Tue, 06 Dec 2011 10:09:11 GMT
[8] => Vary: Accept-Encoding
[9] => X-UA-Compatible: IE=EmulateIE7
[10] => Content-Type: text/html
[11] => Age: 26
[12] => Content-Length: 675274
[13] => X-Cache: HIT from xd33-98.HP08040037.sina.com.cn
[14] => Connection: close
)
[wrapper_type] => http
[stream_type] => tcp_socket/ssl
[mode] => r
[unread_bytes] => 3759
[seekable] =>
[uri] => http://www.sina.com.cn
[timed_out] =>
[blocked] => 1
[eof] =>
)
說明
array stream_get_meta_data ( int $fp )
返回現有 stream 的信息。可以是任何通過 fopen(), fsockopen() 和 pfsockopen() 建立的流。返回的數組包含以下項目:
timed_out (bool) - 如果在上次調用 fread() 或者 fgets() 中等待數據時流超時了則為 TRUE。
blocked (bool) - 如果流處於阻塞 IO 模式時為 TRUE。參見 stream_set_blocking()。
eof (bool) - 如果流到達文件末尾時為 TRUE。注意對於 socket 流甚至當 unread_bytes 為非零值時也可以為 TRUE。要測定是否有更多數據可讀,用 feof() 替代讀取本項目的值。
unread_bytes (int) - 當前在 PHP 自己的內部緩沖區中的字節數。
Note: 不要在腳本中使用此值。
以下項目是 PHP 4.3 新加的:
stream_type (string) - 一個描述流底層實現的標注。
wrapper_type (string) - 一個描述流的分層協議封裝實現的標注。更多關於封裝協議的信息見 支持的協議和封裝協議。
wrapper_data (mixed) - 當前流附加的封裝協議數據。更多封裝協議及其數據的信息見 支持的協議和封裝協議。
filters (array) - 包含有被疊加在當前流的任何過濾器名的數組。過濾器的文檔見附錄中的可用過濾器列表。
Note:
本函數是 PHP 4.3 引進的,在此版本之前,可以用 socket_get_status() 來取得前四個項目並且僅能用於基於 socket 的流。
在 PHP 4.3 及以後版本中, socket_get_status() 是本函數的別名。
Note: 本函數不能作用於通過 Socket 擴展庫創建的流。
以下項目為 PHP 5.0 新加:
mode (string) - 對當前流所要求的訪問類型(見 fopen() 中的表格 1)。
seekable (bool) - 是否可以在當前流中定位。
uri (string) - 與當前流關聯的 URI 或文件名。