Эта ссылка на RSS-канал не загружается с помощью simplexml_load_file
.
Ссылка является допустимым RSS-каналом, и нет, это не проблема разрешения, все остальное загружается.
Прежде всего, вам нужно включить регистрацию ошибок и / или отчетность, чтобы узнать больше. Также вы можете проверить некоторые параметры из возвращаемого значения и удаленного запроса:
$result = simplexml_load_file($url); var_dump($result, $http_response_header);
Это скажет вам, что загрузка не удалась, сообщения об ошибках сообщают вам, почему это не удалось:
PHP Warning: simplexml_load_file ():
http://www.nationnews.com/site/feed/:1
: ошибка парсера: ожидаемый стартовый тег, '<' не найден в /example.php в строке 10
PHP Предупреждение: simplexml_load_file (): in /example.php в строке 10
PHP Предупреждение: simplexml_load_file (): ^ в /example.php в строке 10
И $http_response_header
также покажет вам изображение, которое было возвращено с этого хоста:
array(23) { [0]=> string(15) "HTTP/1.0 200 OK" [1]=> string(35) "Date: Wed, 20 Feb 2013 10:56:11 GMT" [2]=> string(30) "Server: Apache/2.2.15 (CentOS)" [3]=> string(23) "X-Powered-By: PHP/5.3.3" [4]=> string(56) "Set-Cookie: PHPSESSID=qeaq20mrvrc2u4c403sou6oro2; path=/" [5]=> string(38) "Expires: Wed, 20 Feb 2013 08:13:01 GMT" [6]=> string(50) "Cache-Control: no-store, no-cache, must-revalidate" [7]=> string(16) "Pragma: no-cache" [8]=> string(84) "Set-Cookie: exp_last_visit=1046015771; expires=Thu, 20-Feb-2014 10:56:11 GMT; path=/" [9]=> string(87) "Set-Cookie: exp_last_activity=1361375771; expires=Thu, 20-Feb-2014 10:56:11 GMT; path=/" [10]=> string(89) "Set-Cookie: exp_tracker=a%3A1%3A%7Bi%3A0%3Bs%3A11%3A%22%2Fsite%2Ffeed%2F%22%3B%7D; path=/" [11]=> string(44) "Last-Modified: Wed, 20 Feb 2013 07:13:01 GMT" [12]=> string(40) "Cache-Control: post-check=0, pre-check=0" [13]=> string(21) "Vary: Accept-Encoding" [14]=> string(16) "imagetoolbar: no" [15]=> string(17) "Connection: close" [16]=> string(37) "Content-Type: text/xml; charset=utf-8" [17]=> string(76) "Set-Cookie: cookiesession1=HTEVZV0HJNK2HARUL2QBDADH8RXYESJB;Path=/;HttpOnly " [18]=> string(109) "Set-Cookie: exp_last_visit_cookiesession2=tSzDt6/k20k=;Expires=Thu, 20-Feb-2014 10:56:11 GMT;Path=/;HttpOnly " [19]=> string(112) "Set-Cookie: exp_last_activity_cookiesession2=e+FVcqI8+Ck=;Expires=Thu, 20-Feb-2014 10:56:11 GMT;Path=/;HttpOnly " [20]=> string(68) "Set-Cookie: exp_tracker_cookiesession2=w+13lT4TxY0=;Path=/;HttpOnly " [21]=> string(22) "Content-Encoding: gzip" [22]=> string(20) "content-length: 2463" }
Согласно спецификациям HTTP, которые вы используете с помощью HTTP-uri, кодировка содержимого:
[21]=> string(22) "Content-Encoding: gzip"
Это не поддерживается PHP из коробки с помощью HTTP Wrapper, поэтому вам нужно обойти это самостоятельно.
Например, используя Zlib Stream Wrapper ::
$result = simplexml_load_file('compress.zlib://' . $url);
Или с помощью функции gzdecode
:
$result = simplexml_load_string(gzdecode(file_get_contents($url)));
Полный код примера со всеми вариантами:
$url = 'http://www.nationnews.com/site/feed/'; // stream wrapper: $result = simplexml_load_file('compress.zlib://' . $url); var_dump($result, $http_response_header); // gzdecode: $result = simplexml_load_string(gzdecode(file_get_contents($url))); var_dump($result, $http_response_header); // none (the error case): $result = simplexml_load_file($url); var_dump($result, $http_response_header);
Связанные вопросы:
И следующие связанные с Bugreports PHP (только что выбрали некоторые из них, вероятно, не завершены):
RSS-лента gziped. Это должно сделать трюк:
$content = file_get_contents("http://www.nationnews.com/site/feed/"); $rss = simplexml_load_string(gzinflate(substr($content,10,-8)));
См. PHP. Вызовите функцию undefined gzdecode () для получения дополнительной информации о gzinflate.