达到SimpleXML重定向限制

时间:2013-02-04 21:08:16

标签: php simplexml

我正在尝试在远程服务器上打开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]:无法打开流:重定向   达到限制,在/home/admin/public_html/art/art.php上中止   第4行

     

警告: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”   在第4行的/home/admin/public_html/art/art.php中

     

致命错误:在非对象中调用成员函数xpath()   第6行/home/admin/public_html/art/art.php

我的代码是:

<?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));
?>

1 个答案:

答案 0 :(得分:0)

您所看到的错误与SimpleXML无关,它是PHP的透明远程文件访问机制,它正在抱怨。您可以使用file_get_contents($url);创建更简单的测试用例来验证这一点[simplexml_load_file($url)基本上是simplexml_load_string( file_get_contents($url) )的简写

该特定错误消息表明您尝试加载的URL正在提供HTTP重定向(状态代码301302)以转发到另一个URL,然后转发到另一个URL,并且等等。要么存在长链,要么远程服务器配置错误,这样就会产生无限循环。

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

可能的解决方案:

  • 找出最终的URL应该是什么并请求,而不是重定向链的开始
  • 要求远程服务器的维护者检查其配置并减少链接重定向的数量
  • 使用PHP的cURL functions显式获取数据,而不是将URL视为文件名;这将使您完全控制重定向处理等选项,但显然要更加正确