在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()函数,代码如下:
file_get_contents函数,代码如下:
总结:fopen / file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存,但是CURL会自动对DNS信息进行缓存,对同一域名下的网页或者图片的请求只需要一次DNS查询,这大大减少了DNS查询的次数,所以CURL的性能比fopen / file_get_contents 好很多。 file_get_contents与curl效率及稳定性问题,代码如下:
这个超时时间不稳定,经常不好使,这时候,看一下服务器的连接池,会发现一堆类似下面的错误,让你头疼万分,代码如下: file_get_contents(http://***): failed to open stream… 不得已,安装了curl库,写了一个函数替换,代码如下:
如此,除了真正的网络问题外,没再出现任何问题,这是别人做过的关于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是否支持一个函数可以轻松写出下面函数,代码如下: (责任编辑:admin) |