尝试获取远程内容时,curl()
和fopen()
(带stream context)之间存在差异。
灵活性?功能丰富?什么..有什么东西,一个人可以做,另一个不能?
答案 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,因为每个人都熟悉它。