Der Martin: file_get_contents vs. fsockopen

Beitrag lesen

Hallo,

da file_get_contents o.ä. zweckenfremdet werden
wieso ist es eine Zweckentfremdung damit einen URL aufzurufen?

weil file_get_contents *eigentlich* dafür gedacht ist, eine *Datei* zu öffnen und ihren Inhalt auszulesen. Dass man -je nach PHP-Konfiguration- alternativ die Bequemlichkeit bietet, damit auch auf HTTP-Ressourcen zuzugreifen, ist eigentlich schon die Zweckentfremdung.

Ansonsten habe ich eine kleine Zeitmessung gebastelt.
Hier liegt fsockopen klar VOR file_get_contents, also eine Scriptlösung ist deutlich schneller als eine C-Implementation, das begreife wer will.

Du vergleichst hier Bohrmaschinen mit Bohrern.

222 x file_get_contents("http://$host/brw/receiver.php?I=1&D=1001");
haben eine Laufzeit von:   18.961,306 ms

Das bedeutet 222mal ...
 TCP/IP-Verbindung zu $host:80 aufbauen
 GET-Request auf /brw/receiver.php?I=1&D=1001 absetzen
 Serverantwort abwarten
 Header und Nutzinhalt der angeforderten Ressource empfangen
 TCP/IP-Verbindung wieder schließen
 Daten in einen PHP-String kopieren

222 x fsockopen() nur:      4.878,922 ms

Im Gegensatz zu 222mal ...
 TCP/IP-Verbindung zu $host:80 aufbauen
 TCP/IP-Verbindung wieder schließen

Wenn du außer fsockopen() nichts weiter betrachtest, ist das also kein Wunder. Um einen realistischen Vergleich zu haben, müsstest du den Austausch der Request- und Response-Daten z.B. mit fwrite() und fread() auch in deine Rechnung einbeziehen. Und dann hat die C-Implementierung wahrscheinlich auch wieder die Nase vorn - wenn auch nur minimal, wie ich vermute. Denn hier überwiegen eindeutig die Wartezeiten bei der Kommunikation gegenüber der eigentlichen Script-Rechenzeit.

Da fällt eine Entscheidung nicht schwer - nur verstehen tue ich es nicht!

Den Eindruck habe ich auch.
Trotzdem solltest du dich mit der fsockopen()-Lösung anfreunden, denn manche Hoster erlauben mit den file-Funktionen eben keinen URL-Zugriff (url_fopen_wrapper=off).

Schönen Sonntag noch,
 Martin

--
Wenn man sieht, was der liebe Gott auf der Erde so alles zulässt, hat man das Gefühl, er experimentiert immer noch.
  (Sir Peter Ustinov, Charakterdarsteller, 2004 verstorben)