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)