W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
file_get_contents() 把整個(gè)文件讀入一個(gè)字符串中。
該函數(shù)是用于把文件的內(nèi)容讀入到一個(gè)字符串中的首選方法。如果服務(wù)器操作系統(tǒng)支持,還會(huì)使用內(nèi)存映射技術(shù)來(lái)增強(qiáng)性能。
類似函數(shù):fopen() 函數(shù)打開(kāi)一個(gè)文件或 URL。區(qū)別是fopen()打開(kāi)網(wǎng)頁(yè)后,返回的不是字符串,不能直輸出的,還需要用到fgets()這個(gè)函數(shù)來(lái)獲取字符串。fgets()函數(shù)是從文件指針中讀取一行。文件指針必須是有效的,必須指向由 fopen() 或 fsockopen() 成功打開(kāi)的文件(并還未由 fclose() 關(guān)閉)。
相關(guān)函數(shù):file_put_contents() 函數(shù)把一個(gè)字符串寫(xiě)入文件中。
參數(shù) | 描述 |
---|---|
path | 必需。規(guī)定要讀取的文件,或者url。 |
include_path | 可選。如果您還想在 include_path(在 php.ini 中)中搜索文件的話,請(qǐng)?jiān)O(shè)置該參數(shù)為 '1'。 |
context | 可選。規(guī)定文件句柄的環(huán)境。context 是一套可以修改流的行為的選項(xiàng)。若使用 NULL,則忽略。 |
start | 可選。規(guī)定在文件中開(kāi)始讀取的位置。該參數(shù)是 PHP 5.1 中新增的。 |
max_length | 可選。規(guī)定讀取的字節(jié)數(shù)。該參數(shù)是 PHP 5.1 中新增的。 |
提示:該函數(shù)是二進(jìn)制安全的。(意思是二進(jìn)制數(shù)據(jù)(如圖像)和字符數(shù)據(jù)都可以使用此函數(shù)寫(xiě)入。)
上面的代碼將輸出:
獲取某個(gè)網(wǎng)址頁(yè)面的源代碼也可以使用file_get_contents() 函數(shù)
<?php
$pagecontent = file_get_contents("http://m.o2fo.com");
echo $pagecontent;
?>
上面的代碼將輸出:
http://m.o2fo.com地址所對(duì)應(yīng)的源代碼
Note:
如果要打開(kāi)有特殊字符的 URL (比如說(shuō)有空格),就需要使用 urlencode() 進(jìn)行 URL 編碼。
在使用file_get_contents函數(shù)讀取文件或URL的時(shí)候,經(jīng)常會(huì)出現(xiàn)超時(shí)的情況,我們可以通過(guò)一些方法來(lái)盡量的避免或者解決。
1、增加超時(shí)的時(shí)間限制
這里需要注意:set_time_limit(0)只是設(shè)置你的PHP程序的超時(shí)時(shí)間,而不是file_get_contents函數(shù)讀取URL的超時(shí)時(shí)間。
想通過(guò)set_time_limit(0)影響到file_get_contents來(lái)增加超時(shí)時(shí)間,經(jīng)測(cè)試,是無(wú)效的。真正的修改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、超過(guò)幾秒就重新執(zhí)行,多次重試直到成功
$cnt=0;
while($cnt < 3 && ($str=@file_get_contents('http://m.o2fo.com'))===FALSE) $cnt++;
注意:如果執(zhí)行時(shí)間過(guò)長(zhǎng),還需要用函數(shù)set_time_limit(0);就不會(huì)超時(shí)了。
$context = array(
'http' => array(
'proxy' => 'tcp://192.168.0.1:3128', //這里設(shè)置你要使用的代理ip及端口號(hào)
'request_fulluri' => true,
),
);
$context = stream_context_create($context);
$html = file_get_contents("http://m.o2fo.com/archives/806/", false, $context);
echo $html;
設(shè)置需要驗(yàn)證的代理IP去采集獲取頁(yè)面數(shù)據(jù)$auth = base64_encode('USER:PASS'); //LOGIN:PASSWORD 這里是代理服務(wù)器的賬戶名及密碼
$context = array(
'http' => array(
'proxy' => 'tcp://192.168.0.1:3128', //這里設(shè)置你要使用的代理ip及端口號(hào)
'request_fulluri' => true,
'header' => "Proxy-Authorization: Basic $auth",
),
);
$context = stream_context_create($context);
$html = file_get_contents("http://m.o2fo.com/archives/806/", false, $context);
echo $html;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: