2010-02-19 22 views
12

Ich mache eine Webanwendung in PHP und möchte Inhalte aus einer anderen Domäne lesen. Es scheint, dass meine Hauptoptionen und curl sind.Was sind die größten Unterschiede zwischen fopen und curl?

Was sind die Hauptunterschiede zwischen diesen beiden Methoden, insbesondere in Bezug auf Sicherheit und verfügbare Optionen?

Ist es wichtig, ob die URL eine HTTP- oder HTTPS-Site ist?

+0

Die Frage ist nicht so sehr, was 'fopen' tun kann, sondern was die HTTP/HTTPS-Stream-Wrapper tun können. Überprüfen Sie http://de.php.net/manual/en/wrappers.http.php – Gordon

Antwort

16

Curl verwendet eine externe Bibliothek und hat viel mehr Möglichkeiten, die Anfrage anzupassen - benutzerdefinierte Header, POST-Anfrage erstellen, Dateien hochladen. Alles, was du brauchst, muss ich sagen.

Fopen ist beschränkt, um nur eine GET-Anfrage der URL ohne weitere Anpassung zu machen.

Wie für die Sicherheit CURL wird nicht durch die Sicherheitskonfiguration in PHP (wie verbotene fopen von Remote-URLs und solche) beeinflusst.

Die beiden Möglichkeiten geben Ihnen Daten zurück, die Sie in jeder möglichen Weise verwenden können. Wenn Sie eine Sicherheitslücke in Ihrem Projekt machen, ist nach dem Abrufen der Daten doch Ihr Fehler.

Auch ich bin mir nicht ganz sicher, aber ich denke, dass Fopen nicht mit SSL (https) Verbindungen umgehen kann. Sowohl fopen als auch CURL unterstützen SSL (wie von Andy Shellam in einem Kommentar unten angemerkt).

+2

fopen unterstützt HTTPS, vorausgesetzt, Sie haben PHP gegen OpenSSL kompiliert. –

+0

Danke für die Notiz, Andy! Jetzt weiß ich noch etwas über PHP :) – bisko

+0

Es ist möglich, eine POST-Anfrage mit fopen zu machen. Zum Beispiel http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/ Meiner Meinung nach wird curl dort eingesetzt, wo Leute PHP-Sicherheitseinstellungen umgehen wollen, ich persönlich habe nur fopen benutzt und bisher keine Probleme. –

2

Siehe What are the important differences between using fopen($url) and curl in PHP? für einige Sicherheitseinstellungen, die fopen betreffen, nämlich allow_url_include.

Beachten Sie auch, dass mit curl, wenn Sie CURLOPT_FOLLOWLOCATION einstellen, curl Weiterleitungen zu file: // folgt, um Daten abzurufen (immer noch abhängig von open_basedir). Weiterleitungen zu anderen Schemata wie ftp: // könnten schlechter sein (ftp: // wurde nicht getestet). Ohne dass setopt curl überhaupt keinen Weiterleitungen folgt. fopen scheint standardmäßig mit 302 zu arbeiten, aber nur http: // -> http: // und nicht http: // -> file: //.

Verwandte Themen