Simple XML Loadfile -> alternative aus php.net was meint ihr?
Natriumarm
- php
0 dedlfix0 Natriumarm0 dedlfix
Hallo,
ich habe eine externe Datenquelle die auf meine Anfragen mit einer XML antwortet.
Was ich nun bemerkt habe ist, das das PHP hauseigene Simplexml_load_file offenbar nicht timeout fest ist.
Nun habe ich in den Kommentaren bei php.net ( http://www.php.net/manual/de/function.simplexml-load-file.php# )
Eine Lösung mit timeout gefunden, genau das was ich benötige. Nur leider verstehe ich nicht, wie ich ihn einbauen kann?
Bisher habe ich es wirklich simple gemacht:
$xml_url= "http://api.example.com/XML-Test.xml?q=".$frage;
$xml = simplexml_load_file($xml_url);
foreach($xml->anfrage as $abfrage)
Wäre das Userbeispiel dann richtig?
$xml_host = "api.example.com";
$xml_path = "XML-Test.xml?q=".$frage;
$xml = loadXML2($xml_host;, $xml_path;);
if($xml) {
foreach($xml->anfrage as $abfrage)
......
} else {
// wenn es nicht funktioniert hat...
}
PS Bedeutet es denn ich den Code richtig verstehe, das die XML zwei mal geladen wird?
Hi!
ich habe eine externe Datenquelle die auf meine Anfragen mit einer XML antwortet.
Was ich nun bemerkt habe ist, das das PHP hauseigene Simplexml_load_file offenbar nicht timeout fest ist.
Hol die Daten mit file_get_contents(), das kann man über den Parameter context steuern.
Wäre das Userbeispiel dann richtig?
Sieht so aus. Aber ich würde es zugunsten der Stream-Context-Methode nicht so verwenden.
PS Bedeutet es denn ich den Code richtig verstehe, das die XML zwei mal geladen wird?
Worauf begründet sich deine Vermutung?
Lo!
Hol die Daten mit file_get_contents(), das kann man über den Parameter context steuern.
Hm, was mit "Parameter Context" gemeint ist, ist mir nicht klar ( http://php.net/manual/en/context.php )
PS Bedeutet es denn ich den Code richtig verstehe, das die XML zwei mal geladen wird?
Worauf begründet sich deine Vermutung?
zuerst das fwrite (hohlt die Daten um zu prüfen ob erreichbar). Und anschließend simplexml_load_string hohlt sie noch einmal!? Oder etwa nicht?
Hi!
Hol die Daten mit file_get_contents(), das kann man über den Parameter context steuern.
Hm, was mit "Parameter Context" gemeint ist, ist mir nicht klar ( http://php.net/manual/en/context.php )
Auf der Seite zu file_get_contents() ist doch auch ein Beispiel, wie sowas genutzt werden kann. Es geht dabei darum, Funktionen, die eigentlich für den Dateizugriff vorgesehen sind, weitere zum Beispiel für einen Webzugriff benötigte und optionale Parameter setzen zu können. Man kann die HTTP-Header des Requests beeinflussen und eben auch den Timeout. Man muss dazu einen Stream-Context aufbauen. Das ist im Grunde recht einfach, man muss nur im Handbuch den Links in Richtung "Stream" und "HTTP-Wrapper" folgen, wenn man die möglichen Parameter beschrieben finden möchte.
PS Bedeutet es denn ich den Code richtig verstehe, das die XML zwei mal geladen wird?
Worauf begründet sich deine Vermutung?
zuerst das fwrite (hohlt die Daten um zu prüfen ob erreichbar). Und anschließend simplexml_load_string hohlt sie noch einmal!? Oder etwa nicht?
fwrite() holt nichts, das schreibt beziehungsweise sendet in dem Fall etwas, nämlich die Daten, die ein Webserver für einen HTTP-Request benötigt. Schau dir mal an, wie HTTP funktioniert, dann wird dir das Vorgehen klarer.
simplexml_load_string() "lädt" nun aus dem übergebenen String, welcher vorher mit lesenden f...-Funktionen geholt wurde, in die Simple-XML-Struktur, auf die du dann mit foreach etc. zugreifen kannst.
Lo!