PHP file_get_contents() 函數(shù)

2018-07-16 23:40 更新

PHP file_get_contents() 函數(shù)


PHP Filesystem 參考手冊 完整的 PHP Filesystem 參考手冊

定義和用法

file_get_contents() 把整個(gè)文件讀入一個(gè)字符串中。

該函數(shù)是用于把文件的內(nèi)容讀入到一個(gè)字符串中的首選方法。如果服務(wù)器操作系統(tǒng)支持,還會使用內(nèi)存映射技術(shù)來增強(qiáng)性能。


類似函數(shù):fopen() 函數(shù)打開一個(gè)文件或 URL。區(qū)別是fopen()打開網(wǎng)頁后,返回的不是字符串,不能直輸出的,還需要用到fgets()這個(gè)函數(shù)來獲取字符串。fgets()函數(shù)是從文件指針中讀取一行。文件指針必須是有效的,必須指向由 fopen() 或 fsockopen() 成功打開的文件(并還未由 fclose() 關(guān)閉)。

相關(guān)函數(shù):file_put_contents() 函數(shù)把一個(gè)字符串寫入文件中。

語法

file_get_contents(path,include_path,context,start,max_length)

參數(shù) 描述
path 必需。規(guī)定要讀取的文件,或者url。
include_path 可選。如果您還想在 include_path(在 php.ini 中)中搜索文件的話,請?jiān)O(shè)置該參數(shù)為 '1'。
context 可選。規(guī)定文件句柄的環(huán)境。context 是一套可以修改流的行為的選項(xiàng)。若使用 NULL,則忽略。
start 可選。規(guī)定在文件中開始讀取的位置。該參數(shù)是 PHP 5.1 中新增的。
max_length 可選。規(guī)定讀取的字節(jié)數(shù)。該參數(shù)是 PHP 5.1 中新增的。


提示和注釋

提示:該函數(shù)是二進(jìn)制安全的。(意思是二進(jìn)制數(shù)據(jù)(如圖像)和字符數(shù)據(jù)都可以使用此函數(shù)寫入。)


實(shí)例

<?php
echo file_get_contents("test.txt");
?>

上面的代碼將輸出:

This is a test file with test text.

實(shí)例2

獲取某個(gè)網(wǎng)址頁面的源代碼也可以使用file_get_contents() 函數(shù)

<?php
 $pagecontent = file_get_contents("http://hgci.cn");
 echo $pagecontent;
 ?> 

上面的代碼將輸出:

http://hgci.cn地址所對應(yīng)的源代碼

Note:

如果要打開有特殊字符的 URL (比如說有空格),就需要使用 urlencode() 進(jìn)行 URL 編碼。


file_get_contents函數(shù)超時(shí)處理

在使用file_get_contents函數(shù)讀取文件或URL的時(shí)候,經(jīng)常會出現(xiàn)超時(shí)的情況,我們可以通過一些方法來盡量的避免或者解決。

1、增加超時(shí)的時(shí)間限制 

這里需要注意:set_time_limit(0)只是設(shè)置你的PHP程序的超時(shí)時(shí)間,而不是file_get_contents函數(shù)讀取URL的超時(shí)時(shí)間。 

想通過set_time_limit(0)影響到file_get_contents來增加超時(shí)時(shí)間,經(jīng)測試,是無效的。真正的修改file_get_contents延時(shí)可以用resource $context的timeout參數(shù),timeout參數(shù)的單位是s(秒)。 

實(shí)例:

$opts = array( 
    'http'=>array( 
        'method'=>"GET", 
        'timeout'=>30, 
    ) 
); 
$html = file_get_contents('http://www.example.com', false, stream_context_create($opts)); 

2、超過幾秒就重新執(zhí)行,多次重試直到成功

file_get_contents超時(shí)有時(shí)候失敗是因?yàn)榫W(wǎng)絡(luò)等因素造成,沒有解決辦法,但是可以修改程序,失敗時(shí)重試幾次,仍然失敗就放棄,因?yàn)閒ile_get_contents()如果失敗將返回 FALSE,所以可以下面這樣編寫代碼:
$cnt=0; 
while($cnt < 3 && ($str=@file_get_contents('http://hgci.cn'))===FALSE) $cnt++;

注意:如果執(zhí)行時(shí)間過長,還需要用函數(shù)set_time_limit(0);就不會超時(shí)了。


file_get_contents函數(shù)代理設(shè)置處理

設(shè)置代理IP去獲取頁面數(shù)據(jù)

$context = array( 
    'http' => array( 
        'proxy' => 'tcp://192.168.0.1:3128',  //這里設(shè)置你要使用的代理ip及端口號 
        'request_fulluri' => true, 
    ), 
); 
$context = stream_context_create($context); 
$html = file_get_contents("http://hgci.cn/archives/806/", false, $context); 
echo $html;
設(shè)置需要驗(yàn)證的代理IP去采集獲取頁面數(shù)據(jù)
$auth = base64_encode('USER:PASS');   //LOGIN:PASSWORD 這里是代理服務(wù)器的賬戶名及密碼 
$context = array( 
    'http' => array( 
        'proxy' => 'tcp://192.168.0.1:3128',  //這里設(shè)置你要使用的代理ip及端口號 
        'request_fulluri' => true, 
        'header' => "Proxy-Authorization: Basic $auth",
    ), 
); 
$context = stream_context_create($context); 
$html = file_get_contents("http://hgci.cn/archives/806/", false, $context); 
echo $html;


PHP Filesystem 參考手冊 完整的 PHP Filesystem 參考手冊



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號