Intereting Posts
Добавить элемент класса на основе имени страницы Как отсортировать функцию query_posts по настраиваемому полю, а ограничивать сообщения другим настраиваемым полем Переходы строк заголовка PHP и HTTP: какой символ используется для представления? Как автоматизировать сбор данных, а не замораживание в 10% Все серии на данной оси должны иметь один и тот же тип данных Нет периодов в начале или конце выражения? данные о трубопроводах в командной строке php? Декодирование холста todataURL php регулярное выражение для преобразования строки, за которой следует число, в несколько строк, за которыми следует одна из цифр Рекурсивные отношения Laravel Поля MySQL datetime и летнее время – как я могу ссылаться на «дополнительный» час? реализация текущего комментария к любому текущему событию Расшифровка URL не работает должным образом Изменено upload_max_filesize в php.ini, но phpinfo не показывает изменения Как получить текст из текстового файла, используя php точно?

simplexml_load_file не загружается

Эта ссылка на RSS-канал не загружается с помощью simplexml_load_file .

  • Ссылка: http://www.nationnews.com/site/feed

Ссылка является допустимым 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); 

Связанные вопросы:

  • Раскройте файл gzip из CURL, на php
  • Uncompress gzip сжатый HTTP-ответ
  • PHP: вызов неопределенной функции gzdecode ()

И следующие связанные с Bugreports PHP (только что выбрали некоторые из них, вероятно, не завершены):

  • Ошибка # 52926 – stream_context_set_default () не работает по назначению с цепочкой потоков (26 сентября 2010 г.)
  • Ошибка # 47925 – PHPClient не может распаковать ответ (транспонированные методы uncompress?) (8 апреля 2009 г.)
  • Doc Bug # 29045 – gzopen для URL (7 июля 2005 г.)
  • Запрос № 28051 – gzip accept-encoding для HTTP-запроса (19 апреля 2004 г.)

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.