我有第三方服务我正在查询返回的XML文件。如果我在浏览器中访问该URL,我会看到XML数据,但SimpleXML_Load_File只是崩溃了,我也无法显示任何错误。 第一张DVD的URL可以正常工作并加载,但游戏却没有。
任何人都可以在这里看到我的代码有什么问题,或者返回XML以指示为什么simplexml_load_file会失败并阻止页面执行中的更多php?
<?php
######DVDs
$dvdURL = 'http://dvd.find-services.co.uk/dvdSearch.aspx?sort=popular&site=sample&pagesize=1';
$dvdfeed = simplexml_load_file($dvdURL);
var_dump($dvdfeed);
echo '<hr>';
###########Games
$gameURL = 'http://game.find-services.co.uk/gameSearch.aspx?order=popular&site=sample&pagesize=1';
$gamefeed = simplexml_load_file($gameURL);
var_dump($gamefeed);
?>
好的,在Grim的评论之后......关于PHPfiddle的代码,我在我的服务器上只使用了下面的代码:
<?php
$gameURL = 'http://game.find-services.co.uk/gameSearch.aspx?order=popular&site=sample&pagesize=1';
$gamefeed = simplexml_load_file($gameURL);
var_dump($gamefeed);
?>
给出错误!
内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请通过webmaster@finditcheapest.com与服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。 服务器错误日志中可能提供了有关此错误的更多信息。 此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误错误。
但是,访问我的cPanel中的错误日志不会显示任何条目。有什么想法吗?
@Grim ...建议使用cURL,所以这是新代码:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://game.find-services.co.uk/gameSearch.aspx?order=popular&site=sample&pagesize=1");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec($ch);
$xml = utf8_encode($xml);
var_dump($xml);
$simpleXml = simplexml_load_string($xml);
var_dump($simpleXml);
curl_close($ch);
?>
第二个var_dump仍为空白,第一个给出:
string(541)&#34; B00ZG1S834ps4PlayStation 446927No Mans Sky11148490&#34;
视图来源显示:
string(541) "<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?><games><game><id>B00ZG1S834</id><platform>ps4</platform><platformName>PlayStation 4</platformName><category><![CDATA[Strategy]]></category><title><![CDATA[No Man's Sky (PS4)]]></title><titleRefNo>46927</titleRefNo><groupTitle>No Mans Sky</groupTitle></game><ResultsInfo><Message></Message><SearchString></SearchString><SearchPlatform></SearchPlatform><Page>1</Page><PageSize>1</PageSize><MoreResultsAvailable>1</MoreResultsAvailable><RowCount>48490</RowCount></ResultsInfo></games>"
答案 0 :(得分:2)
后一个URL(game.find-services ...)使用ISO-8859-1编码,但PHP需要UTF-8。最好使用CURL
加载文件,使用utf8_encode
将其转换为UTF-8,然后使用simplexml_load_string
获取您的数据。
答案 1 :(得分:1)
几个月后,事实证明这很简单。从原始代码,我改变了行:
$dvdfeed = simplexml_load_file($dvdURL);
为:
$dvds= GetPage($dvdfeed );
$dvdfeed = @simplexml_load_string($dvds);
其中GetPage()
是PHP函数,如下所示:
function GetPage ($URL, $PostParams = ''){
// Set params...
$ch = curl_init($URL);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 100);
if ($PostParams <> ''){
curl_setopt($ch, CURLOPT_POSTFIELDS, $PostParams);
};
$Page = curl_exec($ch);
curl_close($ch);
return $Page;
};
现在无论编码如何,都可以正确加载和解析XML。