php file_get_contents与curl()函数对比
发布:smiling 来源: PHP粉丝网 添加日期:2014-01-16 14:31:04 浏览: 评论:0
在php中file_get_contents与curl()函数都可以用来抓取对方网站的数据并保存到本地服务器中,但是总得来讲file_get_contents()效率稍低些,常用失败的情况、curl()效率挺高的,支持多线程,不过需要开启下curl扩展,也就是说要使用curl函数就必须要打开curl扩展了,而file_get_contents函数系统是默认的。
下面是curl扩展开启的步骤:
1、将PHP文件夹下的三个文件php_curl.dll,libeay32.dll,ssleay32.dll复制到system32下;
2、将php.ini(c:WINDOWS目录下)中的;extension=php_curl.dll中的分号去掉;
3、重启apache或者IIS。
我们先来看看两个函数的简单实例.
curl()函数,代码如下:
- $ch = curl_init("http://www.phpfensi.com/");
- curl_exec($ch);
- curl_close($ch);
- //$ch = curl_init("要采集的网址"); curl_init()函数的作用初始化一个curl会话
- //curl_exec($ch);执行$ch
- //curl_close($ch); 关闭$ch
file_get_contents函数,代码如下:
- <?php
- echo file_get_contents("http://www.phpfensi.com");
- ?>
- //输出:This is a test file with test text.
总结:fopen / file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存,但是CURL会自动对DNS信息进行缓存,对同一域名下的网页或者图片的请求只需要一次DNS查询,这大大减少了DNS查询的次数,所以CURL的性能比fopen / file_get_contents 好很多。
file_get_contents与curl效率及稳定性问题,代码如下:
- $config['context'] = stream_context_create(array('http' => array('method' => "GET",'timeout' => 5)));
- 'timeout' => 5
这个超时时间不稳定,经常不好使,这时候,看一下服务器的连接池,会发现一堆类似下面的错误,让你头疼万分,代码如下:
file_get_contents(http://***): failed to open stream…
不得已,安装了curl库,写了一个函数替换,代码如下:
- function curl_get_contents($url)
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址
- //curl_setopt($ch,CURLOPT_HEADER,1); //是否显示头部信息
- curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时
- curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); //用户访问代理 User-Agent
- curl_setopt($ch, CURLOPT_REFERER,_REFERER_); //设置 referer
- curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //跟踪301
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果
- $r = curl_exec($ch);
- curl_close($ch);
- return $r;
- }
如此,除了真正的网络问题外,没再出现任何问题,这是别人做过的关于curl和file_get_contents的测试,file_get_contents抓取google.com需用秒数,代码如下:
1.2.31319094
2.2.30374217
3.2.21512604
4.3.30553889
5.2.30124092
curl使用的时间:
1.0.68719101
2.0.64675593
3.0.64326
4.0.81983113
5.0.63956594
那么如何根据服务器情况来使用file_get_contents还是curl()呢,下面我们可以利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数,代码如下:
- <?php
- function vita_get_url_content($url) {
- if(function_exists('file_get_contents')) {
- $file_contents = file_get_contents($url);
- } else {
- $ch = curl_init();
- $timeout = 5;
- curl_setopt ($ch, CURLOPT_URL, $url);
- curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
- $file_contents = curl_exec($ch);
- curl_close($ch);
- }
- return $file_contents;
- }
- ?>
Tags: file_get_contents curl 函数
- 上一篇:php怎么截取中文字符串
- 下一篇:php html格式转文本格式代码
相关文章
- ·php中file_get_contents获取网页乱码解决办法(2013-12-05)
- ·php file_get_contents数据采集与常用见问题解决(2014-01-16)
- ·php中常用文件操作读写函数介绍(2014-03-28)
- ·php中curl和file_get_content函数抓页面对比(2014-06-21)
- ·php中file_get_contents和curl两个函数用法(2014-08-02)
- ·file_get_contents实现数据Post数据方法(2014-08-04)
- ·file_get_contents获取远程网页内容函数(2014-09-20)
- ·php中file_get_contents代替使用curl示例(2015-04-09)
- ·PHP CURL或file_get_contents获取网页标题的代码(2015-04-10)
- ·php中file_get_contents函数高级用法(2015-04-15)
- ·PHP file_get_contents函数读取远程数据超时的解决方法(2021-05-26)
- ·php中file_get_contents()函数用法实例(2021-11-10)
- ·php curl_init函数用法(2013-11-28)
- ·php使用curl函数提示Call to undefined function curl_init()(2013-12-04)
- ·php提示:Call to undefined function curl_init(2013-12-04)
- ·cURL函数库错误码说明之PHP curl_errno函数(2013-12-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)