2010-09-09 5 views
6

Ich schreibe einen Proxy-Service zum Zwischenspeichern der Abfragen, die meine mobile App auf Webservice macht. (wie ein Mann in der Mitte)PHP: XML-Datei in String, die schneller ist file_get_contents oder simplexml_load_file mit asXML()

Die Aufgabe der Proxy-Site, die ich gebaut habe, besteht die Abfrage aus der App auf Webservice von Drittanbietern und speichern Sie die Antwort aus dem Webservice von Drittanbietern als XML-Datei und für alle nachfolgenden ruft dieselbe Abfrage ab, die aus der XML-Datei gelesen wird, und stellt die Antwort bereit (im Grunde die Antwort zwischengespeichert - unter Verwendung von PHP, curl und simplexml_load_file).

Jetzt ist meine Frage - Was ist die empfohlene Möglichkeit, eine XML-Datei zu lesen und die Zeichenfolge zurückzugeben.

Option 1: $ contents = file_get_contents ($ filename); echo $ Inhalt;

Option 2: $ xml = simplexml_load_file ($ filename) echo $ xml-> asXML();

+0

Liegt es in der Verantwortung Ihres PHP-Skripts, die XML-Datei auf dem Proxy zu speichern? (in diesem Fall passt meine Antwort zu readfile() nicht ganz ;-)) – VolkerK

Antwort

4
readfile($filename); 

file_get_contents/Echo zuerst den gesamten Inhalt in den PHP-Prozess Speicher liest und sendet es dann an den Ausgabestrom. Es ist nicht notwendig, den gesamten Inhalt im Speicher zu haben, wenn alles, was Sie tun möchten, ID ist, um es weiterzuleiten.
simplexml_load_file() liest nicht nur den gesamten Inhalt in den Speicher, sondern parst auch das Dokument, was zusätzliche Zeit in Anspruch nimmt. Erneut unnötig, wenn Sie keine spezifischen Daten aus dem Dokument abrufen oder testen/ändern möchten.

readfile() sendet den Inhalt direkt an den Ausgabestrom und kann so "wie es aussieht". I.e. Wenn dies unterstützt wird, können Speicherabbilddateien verwendet werden, wenn nicht, kann es zumindest den Inhalt in kleineren Blöcken lesen.

+0

ja es liegt in meiner Verantwortung die Datei zu speichern, aber das wird von der Curl mit dem Code wie \t $ ch = curl_init ($ request); \t \t $ fp = fopen ($ filename, "w"); \t curl_setopt ($ ch, CURLOPT_FILE, $ fp); \t curl_setopt ($ ch, CURLOPT_HEADER, 0); \t curl_exec ($ ch); \t curl_close ($ ch); – gforg

+0

ah ok, dann benutze readfile(), außer du willst das Dokument bearbeiten/ändern. – VolkerK

+0

danke. Readfile funktionierte und nach Ihrem Vorschlag habe ich einige Suchen und alle Punkte zum Verwenden von readfile für mein Szenario getan. Vielen Dank! – gforg

Verwandte Themen