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 重定向(状态代码301, 302)以转发到另一个 URL,然后该 URL 正在转发到另一个,依此类推。要么有一个长链,要么远程服务器配置错误,因此它正在创建一个无限循环。

请注意,这样的重定向可能取决于请求的属性,因此在浏览器中加载它的行为可能不会完全相同。但是,如果确实如此,您应该能够在 Firebug 等浏览器调试工具的 Net 面板中看到它。

可能的解决方案:

  • 计算出最终 URL 应该是什么并请求它,而不是重定向链的开始
  • 要求远程服务器的维护者检查他们的配置并减少链接重定向的数量
  • 使用 PHP 的cURL 函数显式获取数据,而不是将 URL 视为文件名;这将使您可以完全控制诸如重定向处理之类的选项,但显然要正确处理要复杂一些
于 2013-02-05T14:36:52.393 回答