curl、fopen、file_get_contents 哪个效率最高?今天突然想到这么个问题
3个都可以获取远程内容,可是哪个效率最高呢?
有人测试过吗?该怎么测试才能准确呢?然后有没有效率更高的方法?谢谢了~大家讨论下~

解决方案 »

  1.   

    curl多用于互联网之间网页的抓取,fopen多用于读取文件,而file_get_contents多用于获取静态页面内容,file_get_contents的功能介于curl和fopen之间的功能,他们是针对于不同情况下运用的,在互联网之间的网页多用curl,而静态文件的读写等操作多用fopoen,file_get_contents的效率不高
      

  2.   

    嗯,谢谢楼上的~像一些蜘蛛程序,他们抓取页面用的是什么呢?就算是自己定义的方法也离不开最基本PHP函数才对吧。
      

  3.   

    to #4:
    其他的应该会更好,但我目的是想了解下在PHP环境中的方法、函数之类的to #5:
    keep-alive在服务器中可以设置,这个没问题的。像现在有个汉景搜索的程序,就是PHP的,当然他主要是在中文分词上面的应用,但也需要抓取页面
      

  4.   

    php 用curl、fopen来抓取等以上的都可以的,还有其他的
      

  5.   

    蜘蛛一般不会用PHP吧,C/C+靠谱些。其实可以直接写socket发HTTP的。
      

  6.   

    spider应该是用别的语言写的。php也可以。看怎么使用。
      

  7.   

    好象区别不大
    你主要是取得一个页的源码keep alive 是打开一个持续连接,这个在浏览器中有意义,因为要加载很多连接,而我们这里只取源码不需要更多请求。
    不知道这些函数在打开一个新页时是否还能仍用上个连接。至于搜索引擎。差别也不太,只不过搜索引擎请求时会智能判断,比如:无改变的就不请求实体。这些都是基于http协议理解。
      

  8.   

    如果是要模拟登录带验证码的网页 用CURL不错 之前写过一个登陆EMS的 
      

  9.   

    spider不是只取一个页面,可能要取成千上万个,
    keepalive可以在取完一页之后立即取另一页。
    从ext/standard/http_fopen_wrapper.c的源码看,fopen不会keepalive,
    file_get_contents请求http时,使用的是http_fopen_wrapper,因此也不会keepalive。
    curl是可以设置keep-alive的。一般做搜索的大点的公司,爬虫不会用php写,不是C就是C++
      

  10.   

    谢谢各位,其实我不是想写爬虫程序,只是突然想到这3个函数都能抓取远程数据,就想了解下PHP左右能抓取远程数据的函数之间的效率对比。如果能有方便点的测试方法更好,我本机配置不太好。。再多留一段时间,多讨论讨论,就针对PHP函数的效率而言,不是针对爬虫程序的开发和效率问题。
      

  11.   


    Curl好象是可以模拟浏览器的。所以,可能会打一个持续连接,每个连接有多个请求。如果是这样的话,curl 效率可能是最高的。要理解这个:即打一个持续连接,多次请求多个页面。(这只在服务器也支持的情况下有效)据说还有一种是通道连接,比keep alive 更快。所以,这几个函数,除了在连接上有差别外,其他的差别不大。一个请求和响应的时间都是差不多的。至于速度吗?自已测下吧
      

  12.   

    因此,如果fsocketopen能打通道的话,他是最快的。这个一个连接多次请求时才有意义。
      

  13.   

    个人认为 file_get_contents 这个最快.