php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Probleme mit XML-Datei nach fsockopen


 
Gerti
24-07-2004, 18:41 
 
Hi!

Ich lese mit folgendem Script eine XML-Datei aus:
<?php
$file="t=xxx&dev-t=xxx&BrowseNodeSearch=284266&mode=dvd-de&type=lite&page=1&locale=de&sort=+salesrank&f=xml";
$data="";
$fp = fsockopen ("xml.amazon.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br/>\n";
die();
}
else {
fputs($fp, "POST /onca/xml3 HTTP/1.1\r\n");
fputs($fp, "Host: http://host.de\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($file) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $file);
}
while (!feof($fp)){
$data.= fgets($fp, 128);
}
fclose($fp);
echo "<pre>".str_replace(">","&gt;",str_replace("<","&lt;",$data))."</pre><br>";
?>

Leider habe ich in dem Resutlset (sollte ja in $data landen), teilweise wirre Zeichen und Umrüche drin...

Das sieht dann z.B. so aus:
<ImageUrlMedium>http://images-eu.amazon.com/images/P/B0000C6DWS.03.MZZZZZZZ.jpg</ImageUrlMedium>
<ImageUrlLarge>http://images-eu.amazon.com/images/P/B0000C6DWS.03.LZZZZZZZ.jpg</Ima
9a
geUrlLarge>
<ListPrice>EUR 0,00</ListPrice>

Woran liegt das?
Was kann ich dagegen tun?
Gibt es eine Funktion in PHP, die mir nur das Set als solches aus $data ausliest (also Header und alles drumherum entfernt)?

Ich bin ich verzweifelt, da ich im meinem Skript keinen Fehler finde, der als Ursache für diese wirren Zeichen (im Beispiel das "9a") herhalten könnte :dontknow:

Leider ist das XML-Dokument daher auch nicht valide und jeder Parseversuch scheitert natürlich.

Gruß,
Gerti

 
oppi
26-07-2004, 13:51 
 
hm da ich mich in xml nicht so hundertprozentig auskenn nur mal n paar hinweise zu einer möglichen Ursache ausm Manual:
fgets:
Anmerkung: Der Parameter length wurde in PHP 4.2.0 optional. Ist er nicht angegeben, wird als Zeilenlänge 1024 angenommen. Seit PHP 4.3 wird bei einem fehlenden Parameter length so lange gelesen, bis das Ende der Zeile erreicht ist. Ist der Großteil der Zeilen in der Datei größer als 8 kB, ist es effizienter, wenn Sie die maximale Zeilenlänge spezifizieren.

Anmerkung: Diese Funktion ist seit PHP 4.3 "binary safe", was aus frühere Versionen nicht zutrifft.

Anmerkung: Wenn Sie Probleme damit haben, dass PHP Zeilenendezeichen nicht erkennt, entweder beim Lesen von Dateien auf einem Macintosh oder bei Dateien die auf einem Macintosh erstellt wurden, können Sie die Option auto_detect_line_endings aktivieren.

 
goth
26-07-2004, 14:19 
 
Ich würde mal schätzen das im Response-Header irgendwas von "Transfer-coding: chunked" steht ... 9a gibt in diesem Falle Hexadezimal die Chunk-Size an ...
http://www.faqs.org/rfcs/rfc2616.html

Du bist aber nicht der Audi-Gerti von "Gerti's Home-Improvement Page" ... ?!

 
Gerti
26-07-2004, 15:03 
 
Hi!

Doch, der Header gibt als Transfere-Encoding "Chunked" zurück.
Danke für den Tip, habe nun eine Lösung gefunden...

...und "Ja", der bin ich...

Gruß,
Gerti

 
goth
26-07-2004, 15:10 
 
So verzweifelt kenn' ich Dich gar nicht ... grüss' mir Bo. ... ;)

 
Gerti
26-07-2004, 15:42 
 
Hi!

Mache ich gerne...aber wer bist Du denn?

Gruß,
Gerti

 
goth
26-07-2004, 16:10 
 
http://www.php-resource.de/forumma/ma/

 
Gerti
26-07-2004, 16:13 
 
Hi!

Hatte schon sowas vermutet :-)

Gruß,
Gerti


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:18 Uhr.