Я использую fsockopen для небольшого cronjob для чтения и анализа каналов на разных серверах. Для большинства прошлого это работает очень хорошо. Тем не менее на некоторых серверах в ответе появляются очень странные строки, например:
<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
Но когда я открываю канал, например, notepad ++, он работает просто отлично, показывая:
<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>
... просто чтобы показать выдержку. Итак, я здесь что-то не так делаю или это вне моего контроля? Я благодарен за любую идею, чтобы это исправить.
Вот часть кода, который я использую для получения каналов:
$fp = @fsockopen($url["host"], 80, $errno, $errstr, 5);
if (!$fp) {
throw new UrlException("($errno) $errstr ~~~ on opening <b>".$url["host"]."</b>");
} 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);