file_get_contents
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
file_get_contents — 將整個檔案讀入字串
說明
file_get_contents() 是將檔案內容讀入字串的首選方法。如果您的作業系統支援,它將使用記憶體映射技術來提高效能。
注意:
如果您要開啟包含特殊字元(例如空格)的 URI,則需要使用 urlencode() 對 URI 進行編碼。
參數
filename
-
要讀取的檔案名稱。
use_include_path
-
注意:
可以使用 FILE_USE_INCLUDE_PATH
常數來觸發 include 路徑 搜尋。如果啟用了 嚴格類型,則無法使用此功能,因為 FILE_USE_INCLUDE_PATH
是一個 整數。請改用 true
。
context
-
使用 stream_context_create() 建立的有效上下文資源。如果您不需要使用自訂上下文,則可以透過傳入 null
來略過此參數。
offset
-
從原始串流開始讀取的偏移量。負偏移量從串流的末尾開始計算。
遠端檔案不支援搜尋 (offset
)。嘗試在非本地檔案上搜尋可能適用於小的偏移量,但這是不可預測的,因為它作用於緩衝的串流。
length
-
讀取資料的最大長度。預設值是讀取到檔案結尾。請注意,此參數應用於篩選器處理的串流。
回傳值
該函式返回讀取的資料,或者在失敗時返回 false
。
錯誤/例外
如果找不到 filename
、length
小於零,或者在串流中搜尋指定的 offset
失敗,則會產生 E_WARNING
等級的錯誤。
當在目錄上呼叫 file_get_contents() 時,在 Windows 上會產生 E_WARNING
等級的錯誤,從 PHP 7.4 開始,在其他作業系統上也會產生此錯誤。
範例
範例 #1 取得並輸出網站首頁的原始碼
<?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 使用串流脈絡
<?php
// 建立串流
$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);
?>
注意事項
注意:此函式是二進位安全的。
警告使用 SSL 時,Microsoft IIS 會違反協定,在不發送 close_notify
指示器的情況下關閉連線。當您讀取到資料結尾時,PHP 會將此報告為「SSL:嚴重協定錯誤」。要解決此問題,應將 error_reporting 的值降低到不包含警告的級別。當您使用 https://
包裝器開啟串流時,PHP 可以偵測到有問題的 IIS 伺服器軟體,並會抑制警告。當使用 fsockopen() 建立 ssl://
通訊端時,開發人員有責任偵測並抑制此警告。