file_get_contents
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
file_get_contents — 將整個檔案讀入一個字串
說明
string
$filename
,bool
$use_include_path
= false
,resource
$context
= ?,int
$offset
= 0,int
$length
= ?): string|false
和 file() 一樣,只除了
file_get_contents() 把檔案讀入一個字串。將在參數
offset
所指定的位置開始讀取長度為
length
的內容。如果失敗,file_get_contents()
將返回 false
。
file_get_contents() 函式是用來將檔案的內容讀入到一個字串中的首選方法。如果操作系統支援還會使用記憶體對映技術來增強效能。
注意:
如果要打開有特殊字元的 URL (比如說有空格),就需要使用 urlencode() 進行 URL 編碼。
參數
-
filename
-
要讀取的檔案的名稱。
-
use_include_path
-
注意:
常量
FILE_USE_INCLUDE_PATH
用於觸發搜索 include path。 因為FILE_USE_INCLUDE_PATH
是個 int,如果開啟了嚴格型別 將無法啟用。 所以要用true
來代替常量。 -
context
-
stream_context_create() 建立的有效的上下文(context)資源。 如果你不需要自定義 context,可以用
null
來忽略。 -
offset
-
讀取原始數據流的開始位置偏移量。負的 offset 會從數據流的末尾開始統計。
遠端檔案不支援偏移量定址(
offset
)。 對遠端檔案以較小的 offset 可能可以正常定址, 但由於是對緩衝流進行操作,所以操作結果不可預測。 -
length
-
要讀取數據的最大長度。 預設情況下會讀到檔案末尾。 注意,該參數會應用到處理 stream 的過濾器(filter)中。
返回值
函式返回讀取到的數據, 或者在失敗時返回 false
。
錯誤/異常
以下情況會導致 E_WARNING
級別錯誤:
無法找到 filename
檔案;
length
小於零;
在 steam 中無法定址偏移量 offset
。
Windows 下用 file_get_contents() 讀取目錄會導致 E_WARNING
錯誤。
PHP 7.4 起,其他操作系統也會出現同樣錯誤。
範例
示例 #1 獲取並輸出網站首頁 HTML 原始碼
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
示例 #2 在 include_path 里搜索
<?php
// 如果開啟了嚴格型別,例如 declare(strict_types=1);
$file = file_get_contents('./people.txt', true);
// 否則就這樣寫
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
?>
示例 #3 讀取檔案一小節
<?php
// 從第 21 個字元開始,讀取 14 字元長度
$section = file_get_contents('./people.txt', FALSE, NULL, 20, 14);
var_dump($section);
?>
以上例程的輸出類似於:
string(14) "lle Bjori Ro"
示例 #4 使用 stream 上下文(context)
<?php
// 建立 stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
// 以下面設定的 HTTP 頭來打開檔案
$file = file_get_contents('http://www.example.com/', false, $context);
?>
更新日誌
版本 | 說明 |
---|---|
7.1.0 |
支援負數 offset 。
|
註釋
注意: 此函式可安全用於二進制對象。
如已啟用fopen 包裝器,在此函式中, URL 可作為檔名。關於如何指定檔名詳見 fopen()。各種 wapper 的不同功能請參見 支援的協議和封裝協議,注意其用法及其可提供的預定義變數。
使用 SSL 時,Microsoft IIS
會違反協議不發送close_notify
標記就關閉連線。PHP 會在到達數據尾端時報告「SSL: Fatal Protocol Error」。
要解決此問題,error_reporting 應設定為降低階別至不包含警告。
PHP 4.3.7 及更高版本可以在使用 https://
包裝器打開流時檢測出有問題的 IIS 伺服器軟體 並抑制警告。在使用
fsockopen() 建立 ssl://
套接字時, 開發者需檢測並抑制此警告。
參見
- file() - 把整個檔案讀入一個陣列中
- fgets() - 從檔案指針中讀取一行
- fread() - 讀取檔案(可安全用於二進制檔案)
- readfile() - 輸出檔案
- file_put_contents() - 將一個字串寫入檔案
- stream_get_contents() - 讀取資源流到一個字串
- stream_context_create() - 建立資源流上下文
- $http_response_header