探討file_get_contents與curl效率及穩(wěn)定性的分析
做過好多抓取別家網(wǎng)站內(nèi)容的產(chǎn)品,習(xí)慣了使用方便快捷的file_get_contents函數(shù),但是總是會(huì)遇到獲取失敗的問題,盡管按照手冊中的例子設(shè)置了超時(shí),可多數(shù)時(shí)候不會(huì)奏效:
$config['context'] = stream_context_create(array(‘http' => array(‘method' => “GET”,
'timeout' => 5//這個(gè)超時(shí)時(shí)間不穩(wěn)定,經(jīng)常不奏效
)
));
這時(shí)候,看一下服務(wù)器的連接池,會(huì)發(fā)現(xiàn)一堆類似的錯(cuò)誤,讓你頭疼萬分:
file_get_contents(http://***): failed to open stream…
不得已,安裝了curl庫,寫了一個(gè)函數(shù)替換:
<span style="color:#000000; font-weight:bold">function</span> curl_file_get_contents<span style="color:#009900">(</span><span style="color:#000088">$durl</span><span style="color:#009900">)</span><span style="color:#009900">{</span>
<span style="color:#000088">$ch</span> <span style="color:#339933">=</span> <span style="color:#990000">curl_init</span><span style="color:#009900">(</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_URL<span style="color:#339933">,</span> <span style="color:#000088">$durl</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_TIMEOUT<span style="color:#339933">,</span> <span style="color:#cc66cc">5</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_USERAGENT<span style="color:#339933">,</span> _USERAGENT_<span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_REFERER<span style="color:#339933">,</span>_REFERER_<span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#990000">curl_setopt</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#339933">,</span> CURLOPT_RETURNTRANSFER<span style="color:#339933">,</span> <span style="color:#cc66cc">1</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#000088">$r</span> <span style="color:#339933">=</span> <span style="color:#990000">curl_exec</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#990000">curl_close</span><span style="color:#009900">(</span><span style="color:#000088">$ch</span><span style="color:#009900">)</span><span style="color:#339933">;</span>
<span style="color:#b1b100">return</span> <span style="color:#000088">$r</span><span style="color:#339933">;</span>
<span style="color:#009900">}</span>
如此,除了真正的網(wǎng)絡(luò)問題外,沒再出現(xiàn)任何問題。
這是別人做過的關(guān)于curl和file_get_contents的測試:
file_get_contents抓取google.com需用秒數(shù):
2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
curl使用的時(shí)間:
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
差距很大吧?呵呵,從我使用的經(jīng)驗(yàn)來說,這兩個(gè)工具不只是速度有差異,穩(wěn)定性也相差很大。建議對網(wǎng)絡(luò)數(shù)據(jù)抓取穩(wěn)定性要求比較高的朋友使用上面的curl_file_get_contents函數(shù),不但穩(wěn)定速度快,還能假冒瀏覽器欺騙目標(biāo)地址哦!
- php基于curl重寫file_get_contents函數(shù)實(shí)例
- PHP CURL或file_get_contents獲取網(wǎng)頁標(biāo)題的代碼及兩者效率的穩(wěn)定性問題
- php中file_get_contents與curl性能比較分析
- php采用file_get_contents代替使用curl實(shí)例
- 深入file_get_contents與curl函數(shù)的詳解
- 比file_get_contents穩(wěn)定的curl_get_contents分享
- php中使用Curl、socket、file_get_contents三種方法POST提交數(shù)據(jù)
- PHP curl 或 file_get_contents 獲取需要授權(quán)頁面的方法
相關(guān)文章
使用NetBeans + Xdebug調(diào)試PHP程序的方法
前些天發(fā)現(xiàn)通過Notepad++的DBGP插件結(jié)合PHP的xdebug擴(kuò)展可以實(shí)現(xiàn)PHP文件調(diào)試,同時(shí),介紹說包含了單步調(diào)試、監(jiān)視變量還有跨文件調(diào)試。2011-04-04PHP中call_user_func_array回調(diào)函數(shù)的用法示例
這篇文章主要給大家介紹了PHP中call_user_func_array回調(diào)函數(shù)的用法,文中給出了詳細(xì)的示例代碼,相信對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11PHP對象鏈?zhǔn)讲僮鲗?shí)現(xiàn)原理分析
這篇文章主要介紹了PHP對象鏈?zhǔn)讲僮?結(jié)合實(shí)例形式分析了鏈?zhǔn)讲僮鞯暮唵斡梅皩ο箧準(zhǔn)讲僮鞯膱?zhí)行流程,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10php addslashes 利用遞歸實(shí)現(xiàn)使用反斜線引用字符串
以下是對php中利用遞歸實(shí)現(xiàn)使用反斜線引用字符串的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08不錯(cuò)的一篇面向?qū)ο蟮腜HP開發(fā)模式(簡寫版)
不錯(cuò)的一篇面向?qū)ο蟮腜HP開發(fā)模式(簡寫版)...2007-03-03淺析Dos下運(yùn)行php.exe,出現(xiàn)沒有找到php_mbstring.dll 錯(cuò)誤的解決方法
本篇文章是對在Dos下運(yùn)行php.exe,出現(xiàn)沒有找到php_mbstring.dll 錯(cuò)誤的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06通過table標(biāo)簽,PHP輸出EXCEL的實(shí)現(xiàn)方法
以下是利用table標(biāo)簽,對PHP輸出EXCEL的實(shí)現(xiàn)代碼進(jìn)行了介紹,需要的朋友可以過來參考下2013-07-07