2010-02-19 60 views
12

我正在PHP中創建一個Web應用程序,並且想要從另一個域讀取內容。 看來我的主要選擇是fopencurlfopen和curl最大的區別是什麼?

這兩種方法的主要區別是什麼,特別是在安全性和可用選項方面?

如果網址是http或https網站,這有什麼關係嗎?

+0

問題不在於fopen能做什麼,而在於HTTP/HTTPS流包裝能做什麼。檢查http://de.php.net/manual/en/wrappers.http.php – Gordon 2010-02-19 13:49:51

回答

16

Curl使用外部庫,它具有更多的權力來定製請求 - 自定義標題,生成POST請求,上傳文件。你需要的一切我必須說。

Fopen僅限於在沒有任何進一步定製的情況下發送URL的GET請求。

至於安全性CURL不受PHP中的安全配置(如遠程URLS的禁止打開等)的影響。

這兩種可能性都會返回您可以以各種可能的方式使用的數據。如果您在項目中出現安全漏洞,那麼獲取數據之後就是您的錯。

另外我不太確定,但我認爲fopen無法處理SSL(https)連接。 fopen和CURL都支持SSL(正如Andy Shellam在下面的評論中指出的那樣)。

+2

fopen確實支持HTTPS,因爲您已經針對OpenSSL編譯了PHP。 – 2010-02-19 13:40:33

+0

謝謝你的提示,Andy!現在我知道關於PHP的另外一件事:) – bisko 2010-02-19 22:08:30

+0

也可以用fopen做POST請求。例如http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/在我看來,curl被用於人們想要繞過PHP安全設置的地方,我個人只使用fopen到目前爲止沒有問題。 – 2013-11-01 12:15:49

2

請參閱What are the important differences between using fopen($url) and curl in PHP?瞭解影響fopen的一些安全設置,即allow_url_include。

此外,請注意,如果您設置了CURLOPT_FOLLOWLOCATION,那麼curl會重定向到file://以獲取數據(仍然受到open_basedir的限制)。重定向到其他方案,如ftp://可能會更糟(未測試過ftp://)。如果沒有setopt,curl並不會遵循重定向。 fopen似乎默認使用302,但只有http:// - > http://和而不是 http:// - > file://。

相關問題