(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
file_get_contents — 將整個(gè)文件讀入一個(gè)字符串
$filename
,$use_include_path
= false
,$context
= ?,$offset
= 0,$length
= ?
和 file() 一樣,只除了
file_get_contents() 把文件讀入一個(gè)字符串。將在參數(shù)
offset
所指定的位置開始讀取長(zhǎng)度為
length
的內(nèi)容。如果失敗,file_get_contents()
將返回 false
。
file_get_contents() 函數(shù)是用來將文件的內(nèi)容讀入到一個(gè)字符串中的首選方法。如果操作系統(tǒng)支持還會(huì)使用內(nèi)存映射技術(shù)來增強(qiáng)性能。
注意:
如果要打開有特殊字符的 URL (比如說有空格),就需要使用 urlencode() 進(jìn)行 URL 編碼。
filename
要讀取的文件的名稱。
use_include_path
注意:
常量
FILE_USE_INCLUDE_PATH
用于觸發(fā)搜索 include path。 因?yàn)?FILE_USE_INCLUDE_PATH
是個(gè) int,如果開啟了嚴(yán)格類型 將無法啟用。 所以要用true
來代替常量。
context
stream_context_create() 創(chuàng)建的有效的上下文(context)資源。
如果你不需要自定義 context,可以用 null
來忽略。
offset
讀取原始數(shù)據(jù)流的開始位置偏移量。負(fù)的 offset 會(huì)從數(shù)據(jù)流的末尾開始統(tǒng)計(jì)。
遠(yuǎn)程文件不支持偏移量尋址(offset
)。
對(duì)遠(yuǎn)程文件以較小的 offset 可能可以正常尋址,
但由于是對(duì)緩沖流進(jìn)行操作,所以操作結(jié)果不可預(yù)測(cè)。
length
要讀取數(shù)據(jù)的最大長(zhǎng)度。 默認(rèn)情況下會(huì)讀到文件末尾。 注意,該參數(shù)會(huì)應(yīng)用到處理 stream 的過濾器(filter)中。
函數(shù)返回讀取到的數(shù)據(jù), 或者在失敗時(shí)返回 false
。
此函數(shù)可能返回布爾值
false
,但也可能返回等同于 false
的非布爾值。請(qǐng)閱讀 布爾類型章節(jié)以獲取更多信息。應(yīng)使用
===
運(yùn)算符來測(cè)試此函數(shù)的返回值。
以下情況會(huì)導(dǎo)致 E_WARNING
級(jí)別錯(cuò)誤:
無法找到 filename
文件;
length
小于零;
在 steam 中無法尋址偏移量 offset
。
Windows 下用 file_get_contents() 讀取目錄會(huì)導(dǎo)致 E_WARNING
錯(cuò)誤。
PHP 7.4 起,其他操作系統(tǒng)也會(huì)出現(xiàn)同樣錯(cuò)誤。
示例 #1 獲取并輸出網(wǎng)站首頁 HTML 源碼
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
示例 #2 在 include_path 里搜索
<?php
// 如果開啟了嚴(yán)格類型,例如 declare(strict_types=1);
$file = file_get_contents('./people.txt', true);
// 否則就這樣寫
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
?>
示例 #3 讀取文件一小節(jié)
<?php
// 從第 21 個(gè)字符開始,讀取 14 字符長(zhǎng)度
$section = file_get_contents('./people.txt', FALSE, NULL, 20, 14);
var_dump($section);
?>
以上例程的輸出類似于:
string(14) "lle Bjori Ro"
示例 #4 使用 stream 上下文(context)
<?php
// 創(chuàng)建 stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n"
)
);
$context = stream_context_create($opts);
// 以下面設(shè)置的 HTTP 頭來打開文件
$file = file_get_contents('http://www.example.com/', false, $context);
?>
版本 | 說明 |
---|---|
7.1.0 |
支持負(fù)數(shù) offset 。
|
注意: 此函數(shù)可安全用于二進(jìn)制對(duì)象。
如已啟用fopen 包裝器,在此函數(shù)中, URL 可作為文件名。關(guān)于如何指定文件名詳見 fopen()。各種 wapper 的不同功能請(qǐng)參見 支持的協(xié)議和封裝協(xié)議,注意其用法及其可提供的預(yù)定義變量。
使用 SSL 時(shí),Microsoft IIS
會(huì)違反協(xié)議不發(fā)送close_notify
標(biāo)記就關(guān)閉連接。PHP 會(huì)在到達(dá)數(shù)據(jù)尾端時(shí)報(bào)告“SSL: Fatal Protocol Error”。
要解決此問題,error_reporting 應(yīng)設(shè)定為降低級(jí)別至不包含警告。
PHP 4.3.7 及更高版本可以在使用 https://
包裝器打開流時(shí)檢測(cè)出有問題的 IIS 服務(wù)器軟件 并抑制警告。在使用
fsockopen() 創(chuàng)建 ssl://
套接字時(shí), 開發(fā)者需檢測(cè)并抑制此警告。