0

この RSS フィードへのリンクは では読み込まれませんsimplexml_load_file

リンクは有効な RSS フィードであり、他のすべてが読み込まれる許可の問題ではありません。

4

2 に答える 2

1

RSS フィードは gzip されています。これでうまくいくはずです:

$content =  file_get_contents("http://www.nationnews.com/site/feed/");
$rss = simplexml_load_string(gzinflate(substr($content,10,-8)));

gzinflate の詳細については、 PHP: Call to undefined function gzdecode()を参照してください。

于 2013-02-19T23:57:12.230 に答える
1

まず、詳細を確認するために、エラー ログやレポートを有効にする必要があります。また、戻り値とリモート リクエストからいくつかのパラメータを確認できます。

$result = simplexml_load_file($url);

var_dump($result, $http_response_header);

これにより、読み込みが失敗したことがわかります。エラー メッセージには、失敗した理由が示されています。

PHP 警告: simplexml_load_file()::http://www.nationnews.com/site/feed/:1パーサー エラー: 開始タグが必要です。10 行目の /example.php に '<' が見つかりません
PHP 警告: simplexml_load_file(): 10 行目の /example.php にあり
ます 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 uri を使用して利用する HTTP 仕様によると、コンテンツのエンコードは次のとおりです。

[21]=> string(22) "Content-Encoding: gzip"

これは、HTTP ラッパーを使用したそのままの PHP ではサポートされていないため、独自の方法で回避する必要があります。

たとえば、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);

関連する質問:

また、次の PHP バグレポートが関連しています (一部を抜粋しただけで、完全ではない可能性があります)。

于 2013-02-20T10:59:34.470 に答える