本文描述了php中file_get_contents和curl的性能比较。分享给大家参考。具体如下:
如果不仔细分析php中的性能,就会发现file_get_contents和curl有很多共同点。他们可以收集文件和打开文件,但是如果你仔细比较,你会发现很多不同之处。让我们看看file_get_contents和curl之间的区别。
PHP中fopen、file _ get _ contents和curl函数的区别:
1.fopen /file_get_contents每次被请求都会再次做DNS查询,不会缓存DNS信息。但是,CURL会自动缓存DNS信息。同一域名下的网页或图片的请求只需要一次DNS查询。这大大减少了DNS查询的数量。因此,CURL的性能比fopen /file_get_contents好得多。
2.fopen /file_get_contents请求HTTP时,使用http_fopen_wrapper代替keeplive。卷曲可以。这样,当请求多个链接时,curl将更加高效。
fopen/file _ get _ contents函数将受到php.ini文件中allow_url_open选项配置的影响。如果配置被关闭,该功能将失败。卷曲不受此配置的影响。
4.curl可以模拟各种请求,如POST数据、表单提交等。用户可以根据自己的需求定制请求。而fopen/file_get_contents只能通过get获取数据。当file_get_contents获取远程文件时,结果将存储在一个字符串中,fiels函数将存储为一个数组
因此,我更喜欢使用curl来访问远程url。Php有curl模块扩展,非常强大。
聊了很久,大家可能会说性能没有可比性,那我们来看看
最近,我们需要从别人的网站上获取音乐数据。使用了file_get_contents函数,但它总是无法获取。虽然超时是按照手册里的例子设置的,但是大部分时间都不会起作用:复制代码如下: $ config[' context ']=stream _ context _ create(array(' http '=array(' method '=' get ',' timeout'=当时如果你看看服务器的连接池,会发现一堆类似的错误,让我很头疼:
file _ get _ contents(http://* * *):打开流失败…现在改为使用curl库,并编写函数替换:复制代码如下:函数curl _ file _ get _ contents($ durl){ $ ch=curl _ init();curl_setopt($ch,CURLOPT_URL,$ durl);curl_setopt($ch,CURLOPT_TIMEOUT,5);curl_setopt($ch,CURLOPT_USERAGENT,_ USERAGENT _);curl_setopt($ch,CURLOPT_REFERER,_ REFERER _);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$ r=curl _ exec($ ch);curl _ close($ ch);返回$ r;}这样一来,除了真正的网络问题,就没有更多的问题了。这是一个关于curl和file_get_contents的测试,其他人已经做过了:file_get_contents抓取google.com: 2需要几秒钟的时间。39942.94394944431卷曲使用时间:0.687191010。
差距很大?哦,从我的经验来看,这两个工具不仅速度不同,稳定性也不同。
建议对网络数据抓取的稳定性要求高的朋友使用上面的curl_file_get_contents函数,不仅稳定性快,还可以通过冒充浏览器来欺骗目标地址
再看一个例子
curl和file_get_contents之间的比较结果稍后发布。除了curl和file_get_contents的性能比较之外,还包括它们的性能比较。说话之前,先看看下面的结果图:
卷曲与文件_获取_内容性能对比服务器端编程语言(专业超文本预处理器的缩写)源代码如下:复制代码代码如下:php /** *通过淘宝互联网协议(互联网协议)接口获取互联网协议(互联网协议)地理位置* @ param string $ IP * @返回: string * */函数getcity curl($ IP){ $ URL=' http://IP。淘宝。com/service/GetPinfo。PHP?ip=' .$ IP $ ch=curl _ init();$超时=5;curl_setopt ($ch,CURLOPT_URL,$ URL);curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,$ time out);$ file _ contents=curl _ exec($ ch);curl _ close($ ch);$ ipin fo=JSON _ decode($ file _ contents);if($ ipinfo-code==' 1 '){ return false;} $city=$ipinfo-data-region .$ ipin fo-数据-城市;返回$ city}函数getCity($ IP){ $ URL=' http://IP。淘宝。com/service/GetPinfo。PHP?ip=' .$ IP $ ipin fo=JSON _ decode(file _ get _ contents($ URL));if($ ipinfo-code==' 1 '){ return false;} $city=$ipinfo-data-region .$ ipin fo-数据-城市;返回$ city }//for file _ get _ contents $ start time=explode(',micro time());$开始时间=$开始时间[0]$开始时间[1];for($ I=1;$ I=10 $ I){ echo Gettcity(' 121。207 .247 .202 ')。/br ';} $endTime=explode(',micro time());$结束时间=$结束时间[0]$结束时间[1];$总时间=$结束时间-$开始时间;回显file _ get _ contents:number_format($totalTime,10,'。', '').秒/br ';//对于curl $startTime2=explode(',micro time());$开始时间2=$开始时间2[0]$开始时间2[1];for($ I=1;$ i=10$ I){ echo getcity curl(' 121。207 .247 .202 ')。/br ';} $endTime2=explode(',micro time());$结束时间2=$结束时间2[0]$结束时间2[1];$总时间2=$结束时间2-$开始时间2;回声curl: ' .number_format($totalTime2,10 ' ',' ')。秒;测试访问//www .JB 51。网络文件获取内容速度:4.2404510975秒速度一秒钟后。58860 .88888888861比文件_获取_内容速度快了30%左右,最重要的是服务器负载更低。
总结
文件_获取_内容处理频繁小的时候,用它感觉挺好的。没什么异常。如果你的文件被1k人处理。那么你的服务器中央处理器就等着高升吧。所以建议自己和大家在以后写服务器端编程语言(专业超文本预处理器的缩写)代码的时候使用卷曲库。
希望本文所述对大家的服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。