哪个更好:cURL或fopen(使用流上下文)

时间:2017-03-06 15:28:35

标签: php curl

尝试获取远程内容时,curl()fopen()(带stream context)之间存在差异。

灵活性?功能丰富?什么..有什么东西,一个人可以做,另一个不能?

2 个答案:

答案 0 :(得分:3)

如果我没有错,那么PHP卷曲扩展和流都是PHP / 4天的恐龙,你可以从语言的早期开始使用那种API:不连贯且具有魔法功能成为安全漏洞,例如触发文件上传(curl)的字符串中的@前缀和在最不期望的位置(例如include语句)中发生的远程下载。

然而,与mysql或mcrypt这样的其他时尚扩展不同,这两者似乎都在这些年中得到了适当的维护,所以我敢说2017年它们既安全又平等。当然,它们都不是面向对象的或者很好用,这导致创建像Guzzle这样的包装器以及像PSR-7这样的标准化尝试。

如果我们坚持使用普通的HTTP,我相信功能集大致相同,只是Curl本身支持multipart/form-data文件上传(您需要自己实现流,尽管它不是'很难)和cookie处理。

此外,Curl多年来一直被大量使用,您可能会找到更好的文档和更少的过时信息。

PHP流的关键点在于它们超越了HTTP(您甚至可以注册自己的协议),并且它们与其他几个PHP扩展很好地集成(大多数接受文件指针的内置函数也会接受流)。但是,Curl主要是一个独立的包装器,位于同名的C扩展名之上。

关于可用性,我发现托管计划中缺少这两个功能,但这种情况往往发生在不知情客户购买的蹩脚计划上。

总结:两者都很难看,都完成了工作。除了基准(我没有做过),它主要是一个偏好的问题......直到你需要一个人可以做的功能而另一个不能: - )

答案 1 :(得分:1)

这个问题之前已经多次回答,但这是我的看法。

当涉及到流媒体,发送,接收以及您可能想要做的所有其他事情时,Curl会更加强大。

fopen通常不是为Web请求设计的,只能轻松地执行GET请求。 POST请求是违反直觉的,可能更多的是黑客而不是可接受的做法。

Curl支持SSL,自定义标头,Cookie,文件上传,默认情况下可用于所有托管服务,而使用fopen的网址请求经常被禁用,必须由管理员重新启用。

此外,除非您使用的框架具有自己的Web请求实现,否则您应该始终坚持使用CURL,因为每个人都熟悉它。