PHP file_get_contents() 函數(shù)

2018-07-16 23:40 更新

PHP file_get_contents() 函數(shù)


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

定義和用法

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

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


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

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

語法

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

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


提示和注釋

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


實例

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

上面的代碼將輸出:

This is a test file with test text.

實例2

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

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

上面的代碼將輸出:

http://hgci.cn地址所對應的源代碼

Note:

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


file_get_contents函數(shù)超時處理

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

1、增加超時的時間限制 

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

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

實例:

$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超時有時候失敗是因為網(wǎng)絡等因素造成,沒有解決辦法,但是可以修改程序,失敗時重試幾次,仍然失敗就放棄,因為file_get_contents()如果失敗將返回 FALSE,所以可以下面這樣編寫代碼:
$cnt=0; 
while($cnt < 3 && ($str=@file_get_contents('http://hgci.cn'))===FALSE) $cnt++;

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


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

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

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

公眾號
微信公眾號

編程獅公眾號