W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
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ù)把一個字符串寫入文件中。
參數(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ù)寫入。)
上面的代碼將輸出:
獲取某個網(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ù)讀取文件或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í)行,多次重試直到成功
$cnt=0;
while($cnt < 3 && ($str=@file_get_contents('http://hgci.cn'))===FALSE) $cnt++;
注意:如果執(zhí)行時間過長,還需要用函數(shù)set_time_limit(0);就不會超時了。
$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;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: