curl、fopen、file_get_contents 哪个效率最高

xxbirch 2010-06-16 08:31:25
curl、fopen、file_get_contents 哪个效率最高?

今天突然想到这么个问题。。。
3个都可以获取远程内容,可是哪个效率最高呢?
有人测试过吗?该怎么测试才能准确呢?

然后有没有效率更高的方法?

谢谢了~大家讨论下~
...全文
1904 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
化蝶自在飞 2010-06-24
  • 打赏
  • 举报
回复
个人认为 file_get_contents 这个最快.
xxbirch 2010-06-19
  • 打赏
  • 举报
回复
好,谢谢各位了~~
fxs_2008 2010-06-18
  • 打赏
  • 举报
回复
因此,如果fsocketopen能打通道的话,他是最快的。

这个一个连接多次请求时才有意义。
fxs_2008 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 do_fork 的回复:]

spider不是只取一个页面,可能要取成千上万个,
keepalive可以在取完一页之后立即取另一页。
从ext/standard/http_fopen_wrapper.c的源码看,fopen不会keepalive,
file_get_contents请求http时,使用的是http_fopen_wrapper,因此也不会keepalive。
curl是可以设置keep-alive的。
……
[/Quote]

Curl好象是可以模拟浏览器的。所以,可能会打一个持续连接,每个连接有多个请求。如果是这样的话,curl 效率可能是最高的。

要理解这个:即打一个持续连接,多次请求多个页面。(这只在服务器也支持的情况下有效)

据说还有一种是通道连接,比keep alive 更快。

所以,这几个函数,除了在连接上有差别外,其他的差别不大。一个请求和响应的时间都是差不多的。

至于速度吗?自已测下吧
fxs_2008 2010-06-17
  • 打赏
  • 举报
回复
好象区别不大
你主要是取得一个页的源码

keep alive 是打开一个持续连接,这个在浏览器中有意义,因为要加载很多连接,而我们这里只取源码

不需要更多请求。
不知道这些函数在打开一个新页时是否还能仍用上个连接。

至于搜索引擎。差别也不太,只不过搜索引擎请求时会智能判断,比如:无改变的就不请求实体。

这些都是基于http协议理解。

天降大任于斯 2010-06-17
  • 打赏
  • 举报
回复
路过,来学习的
Fusuton 2010-06-17
  • 打赏
  • 举报
回复
学习学习~~~

原来抓取内容的方法还有这些区别
dehexiao 2010-06-17
  • 打赏
  • 举报
回复
路过,学习了!
Dogfish 2010-06-17
  • 打赏
  • 举报
回复
spider应该是用别的语言写的。php也可以。看怎么使用。
xxbirch 2010-06-17
  • 打赏
  • 举报
回复
谢谢各位,其实我不是想写爬虫程序,只是突然想到这3个函数都能抓取远程数据,就想了解下PHP左右能抓取远程数据的函数之间的效率对比。

如果能有方便点的测试方法更好,我本机配置不太好。。

再多留一段时间,多讨论讨论,就针对PHP函数的效率而言,不是针对爬虫程序的开发和效率问题。
CodeBus 2010-06-17
  • 打赏
  • 举报
回复
蜘蛛一般不会用PHP吧,C/C+靠谱些。其实可以直接写socket发HTTP的。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 li_birch 的回复:]

to #4:
其他的应该会更好,但我目的是想了解下在PHP环境中的方法、函数之类的

to #5:
keep-alive在服务器中可以设置,这个没问题的。

像现在有个汉景搜索的程序,就是PHP的,当然他主要是在中文分词上面的应用,但也需要抓取页面
[/Quote]

汉景搜索?? 我怎么没查到啊??用百度查也没查到...
myhope88 2010-06-17
  • 打赏
  • 举报
回复
路过,来学习的
kyzy_yy_pm 2010-06-17
  • 打赏
  • 举报
回复
php 用curl、fopen来抓取等以上的都可以的,还有其他的
woliujinyuan 2010-06-17
  • 打赏
  • 举报
回复
标个记号,慢慢学习
xxbirch 2010-06-17
  • 打赏
  • 举报
回复
to #4:
其他的应该会更好,但我目的是想了解下在PHP环境中的方法、函数之类的

to #5:
keep-alive在服务器中可以设置,这个没问题的。

像现在有个汉景搜索的程序,就是PHP的,当然他主要是在中文分词上面的应用,但也需要抓取页面
do_fork 2010-06-17
  • 打赏
  • 举报
回复
当然是支持keep-alive的快了
asssasharp 2010-06-17
  • 打赏
  • 举报
回复
蜘蛛程序是用php吗?其他的脚本语言,如C#速度更快吧。帮顶。
xxbirch 2010-06-17
  • 打赏
  • 举报
回复
顶起来继续问。。

有什么高效的抓取远程信息的方法呢?

蜘蛛的效率应该是很不错的了,那用的是什么方法呢一般?
do_fork 2010-06-17
  • 打赏
  • 举报
回复
spider不是只取一个页面,可能要取成千上万个,
keepalive可以在取完一页之后立即取另一页。
从ext/standard/http_fopen_wrapper.c的源码看,fopen不会keepalive,
file_get_contents请求http时,使用的是http_fopen_wrapper,因此也不会keepalive。
curl是可以设置keep-alive的。

一般做搜索的大点的公司,爬虫不会用php写,不是C就是C++
加载更多回复(3)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧