0

リモート サーバーで XML ファイルを開こうとしていますが、リダイレクトの制限に達したというエラーが表示されます。リモコンを制御できないので、その制限を増やす方法はありますか? または、サーバーの所有者と話をして、彼らができることを確認する必要がありますか?

これはエラーです:

警告: simplexml_load_file( http://www.server.com/search/music.xml?key=key&type=songs&p1=All%20Things%20New&p2=Elevation%20Worship ) [function.simplexml-load-file]: ストリームを開けませんでした: リダイレクトの制限に達しました。4 行目の /home/admin/public_html/art/art.php で中止します

警告: simplexml_load_file() [function.simplexml-load-file]: I/O 警告: 外部エンティティの読み込みに失敗しました " http://www.server.com/search/music.xml?key=key&type=songs&p1=All% 20Things%20New&p2=Elevation%20Worship " /home/admin/public_html/art/art.php の 4 行目

致命的なエラー: 6 行目の /home/admin/public_html/art/art.php の非オブジェクトに対するメンバー関数 xpath() の呼び出し

私のコードは次のとおりです。

<?php
function errorHandler($n, $m, $f, $l) {
    header('Location: blank.png');
}

set_error_handler('errorHandler');

$url = 'http://REMOTESERVER/search/music.xml?key=KEY&type=songs&p1=' . htmlspecialchars($_GET["track"]) . '&p2=' . htmlspecialchars($_GET["artist"]) . '';
$xml = simplexml_load_file($url);

$img = $xml->xpath('//image200');

$large = (string)$img[0];

header("Location:".urldecode($large));
?>
4

1 に答える 1

0

表示されているエラーは、SimpleXML 自体とは関係ありません。不平を言っているのは、PHP の透過的なリモート ファイル アクセス メカニズムです。file_get_contents($url);[simplexml_load_file($url)は基本的に の省略形ですsimplexml_load_string( file_get_contents($url) )]を使用して、より単純なテスト ケースを作成することで、これを確認できます。

この特定のエラー メッセージは、読み込もうとしている URL が HTTP リダイレクト (ステータス コード301302) を提供して別の URL に転送し、その URL が別の URL に転送されていることを示しています。これらの長いチェーンがあるか、リモート サーバーが正しく構成されていないため、無限ループが作成されています。

このようなリダイレクトは、リクエストの属性によって条件付けられる可能性があるため、ブラウザにロードするとまったく同じように動作しない場合があることに注意してください。ただし、そうであれば、Firebug などのブラウザー デバッグ ツールの [ネット] パネルで確認できるはずです。

可能な解決策:

  • リダイレクトチェーンの開始ではなく、最終的なURLがどうあるべきかを考え出し、それをリクエストする
  • リモートサーバーのメンテナーに構成を確認して、チェーンされたリダイレクトの数を減らすように依頼してください
  • URL をファイル名として扱うのではなく、PHP のcURL 関数を使用してデータを明示的に取得します。これにより、リダイレクト処理などのオプションを完全に制御できますが、明らかに、正しく行うには少し手間がかかります
于 2013-02-05T14:36:52.393 に答える