Ich verwende fsockopen in einem kleinen Cronjob, um Feeds auf verschiedenen Servern zu lesen und zu parsen. In den meisten Fällen funktioniert das sehr gut. Doch auf einigen Servern erhalte ich sehr seltsame Zeilen in der Antwort, wie diese:
<language>en</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
11
<item>
<title>
1f
July 8th, 2010</title>
<link>
32
http://darkencomic.com/?p=2406</link>
<comments>
3e
Wenn ich den Feed jedoch z. B. in Notepad++ öffne, funktioniert er einwandfrei und wird angezeigt:
<language>en</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<item>
<title>July 8th, 2010</title>
<link>http://darkencomic.com/?p=2406</link>
<comments>
...nur um einen Auszug zu zeigen. Mache ich hier etwas falsch oder liegt das außerhalb meiner Kontrolle? Ich bin für jede Idee dankbar, wie ich das Problem beheben kann. Hier ist ein Teil des Codes, den ich zum Abrufen der Feeds verwende:
$fp = @fsockopen($url\["host"\], 80, $errno, $errstr, 5);
if (!$fp) {
throw new UrlException("($errno) $errstr ~~~ on opening **".$url\["host"\]."**");
} else {
$out = "GET ".$path." HTTP/1.1\\r\\n"
."Host: ".$url\["host"\]."\\r\\n"
."Connection: Close\\r\\n\\r\\n";
fwrite($fp, $out);
$contents = '';
while (!feof($fp)) {
$contents .= stream\_get\_contents($fp,128);
}
fclose($fp);