fopen和curl之间的最大区别是什么?

14

我正在使用PHP制作一个Web应用程序,希望从另一个域中读取内容。似乎我的主要选择是fopencurl

这两种方法有哪些主要区别,特别是在安全性和可用选项方面?

如果URL是http或https网站,是否重要?


问题不在于 fopen 能做什么,而在于 HTTP/HTTPS 流包装器能做什么。请查看 http://de.php.net/manual/en/wrappers.http.php。 - Gordon
2个回答

17

Curl使用外部库,因此可以更加强大地自定义请求 - 自定义标头、生成POST请求、上传文件。我必须说,这是你所需要的一切。

fopen仅限于对URL进行GET请求,没有进一步的自定义选项。

至于安全性,CURL不受PHP安全配置的影响(例如禁止fopen远程URL等)。

这两种可能性都会返回数据,您可以按照您想要的方式使用它。如果您在项目中存在安全漏洞,在获取数据后就是您的责任。

此外,我不太确定,但我认为fopen无法处理SSL(https)连接。如下评论所述,fopen和CURL都支持SSL。


2
fopen支持HTTPS,只要您已经使用OpenSSL编译了PHP。 - Andy Shellam
谢谢你的留言,Andy!现在我对PHP又多了一点了解 :) - bisko
1
可以使用fopen进行POST请求。例如,http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/。在我看来,curl用于绕过PHP安全设置的情况下,我个人只使用过fopen,至今没有出现问题。 - Rauli Rajande

2
请参见使用PHP中的fopen($ url)和curl之间的重要区别是什么? ,其中包括一些影响fopen的安全设置,即allow_url_include。
另外,请注意,如果您在curl中设置了setopt CURLOPT_FOLLOWLOCATION,则curl会跟随重定向到file://以获取数据(仍然受到open_basedir的限制)。 重定向到其他协议(如ftp://)可能更糟糕(未经过ftp测试)。 没有设置此选项时,curl根本不会遵循重定向。 fopen似乎默认使用302,但仅适用于 http:// -> http:// ,而不是 http:// -> file://。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接