simplexml_load_file erzeugt Fehler!
Robert-Green
- php
0 ChrisB0 Vinzenz Mai
Hallo,
ich habe ein Problem mit dem Simplexml_load_file. Denn wir haben festgestellt, das gelegentlich der Quellserver für die XML Datein nicht erreichbar ist. Der Nutzer sieht also eine blöde PHP Fehlermeldung.
Eine Lösung habe ich auch gefunden: http://www.php.net/manual/de/function.simplexml-load-file.php#97077 .
Hier wird vorher geprüft ob die XML auch wirklich erreichbar ist.
Nun zeigt sich aber folgendes Problem:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\xampplite\htdocs\abfrage\test.php on line 22
Warning: simplexml_load_string() [function.simplexml-load-string]: 634 in C:\xampplite\htdocs\abfrage\test.php on line 22
Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\xampplite\htdocs\abfrage\test.php on line 22
Für den Quellcode:
<?php
function loadXML2($domain, $path, $timeout = 5) {
$fp = fsockopen($domain, 80, $errno, $errstr, $timeout);
if($fp) {
// make request
$out = "GET $path HTTP/1.1\r\n";
$out .= "Host: $domain\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
// get response
$resp = "";
while (!feof($fp)) {
$resp .= fgets($fp, 128);
}
fclose($fp);
// check status is 200
$status_regex = "/HTTP\/1\.\d\s(\d+)/";
if(preg_match($status_regex, $resp, $matches) && $matches[1] == 200) {
// load xml as object
$parts = explode("\r\n\r\n", $resp);
return simplexml_load_string($parts[1]);
}
}
return false;
}
$xml = loadXML2("meine-domain.com", "/xml/index.php?only=dong");
if($xml) {
echo 'XML geladen'; // xml doc loaded
} else {
echo 'Nee hat nicht geklappt'; // failed. show friendly error message.
}
?>
Die XML ist bei manuellem Aufruf fehlerfrei sehe:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<paket>
<anfrage>
<dong>DE</dong>
<objekt>1</objekt>
<ergebnis>2</ergebnis>
</anfrage>
</paket>
Gedankenfehler?
Hi,
ich habe ein Problem mit dem Simplexml_load_file. Denn wir haben festgestellt, das gelegentlich der Quellserver für die XML Datein nicht erreichbar ist. Der Nutzer sieht also eine blöde PHP Fehlermeldung.
Eine Lösung habe ich auch gefunden: http://www.php.net/manual/de/function.simplexml-load-file.php#97077 .
Hier wird vorher geprüft ob die XML auch wirklich erreichbar ist.
Wie lautet der vom entfernten Server gesendete HTTP-Statuscode, wenn die Ressource nicht erreichbar ist?
MfG ChrisB
Hallo,
Nun zeigt sich aber folgendes Problem:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\xampplite\htdocs\abfrage\test.php on line 22
Gedankenfehler?
prüfe den Inhalt von $resp bzw. $parts.
Freundliche Grüße
Vinzenz
prüfe den Inhalt von $resp bzw. $parts.
Da scheint der Fehler zu sein beim Print_R erscheint:
HTTP/1.1 200 OK
Date: Wed, 26 Jan 2011 16:24:40 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.2.9
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
634
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<paket>
<anfrage>
<dong>DE</dong>
<objekt>1</objekt>
<ergebnis>2</ergebnis>
</anfrage>
</paket>
Wenn ich richtig liege ist  das Problem? Dieses ist aber beim normalen Aufruf nicht vorhanden!
prüfe den Inhalt von $resp bzw. $parts.
Hallo,
ich habe gerade die XML Datei auf den Header UTF8 getrimmt:
HTTP/1.1 200 OK
Date: Wed, 26 Jan 2011 16:30:54 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.2.9
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
634
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Das war aber leider Ergebnislos...
Hallo,
ich habe gerade die XML Datei auf den Header UTF8 getrimmt:
634
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>[/code]
Das war aber leider Ergebnislos...
Du solltest auch lieber die [sic!] BOM entfernen. UTF-8 benötigt keine solche Markierung. Vermutlich ist ein Editor dran schuld, welchen hast Du benutzt?
Freundliche Grüße
Vinzenz
Hallo,
prüfe den Inhalt von $resp bzw. $parts.
HTTP/1.1 200 OK
Date: Wed, 26 Jan 2011 16:24:40 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.2.9
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html634
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<paket>
<anfrage>
<dong>DE</dong>
<objekt>1</objekt>
<ergebnis>2</ergebnis>
</anfrage></paket>
Wenn ich richtig liege ist  das Problem?
auch, aber noch mehr irritiert mich die "634", die da so unerwartet zwischendrin steht. Ist das Teil der erhaltenen Server-Response (und damit auch Teil des Dokuments)? Oder kommt die durch deine Debug-Ausgaben irgendwo zusätzlich ins Spiel?
Dieses ist aber beim normalen Aufruf nicht vorhanden!
Doch, das wird nur von Programmen, die das kennen, nicht angezeigt. Das ist eine BOM und soll für verarbeitende Programme ein zusätzlicher Hinweis darauf sein, dass das Dokument in UTF-8 codiert ist. Macht aber in der Praxis mehr Ärger als sie nützt, anscheinend auch bei simplexml.
Wenn du Einfluss auf das XML-Dokument hast, solltest du darauf drängen, dass es als UTF-8 ohne BOM gespeichert wird. Andernfalls musst du dieses Zeichen wohl selbst abprüfen und ignorieren.
So long,
Martin