我试图读取XML Feed并将内容存储在我服务器上的文件中。执行此操作的脚本在页面加载时通过AJAX调用,并且仅在自上次更新后至少3分钟时才运行。
下面的代码似乎以前工作正常,但现在我得到了这个:"致命错误:在非对象上调用成员函数asXml()"
最近托管XML Feed的服务器" reset"。我在发生的那天注意到了这个问题,但是,Feed仍然可以访问并且显示正常。
if (get_option('last_showtime_check') < (time() - (5 * 60))) {
update_option('last_showtime_check', time());
$url = "http://somedomain.com/showtimes.xml";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_URL, $url); // get the url contents
echo var_dump($ch); // Returns "resource (261) of type (curl)"
$data = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($data);
echo var_dump($xml); // Returns "bool(false)"
$xml->asXml('showtimes-test.xml');
}
答案 0 :(得分:1)
如果您只是尝试从远程服务器下载XML文件并将其保存在本地,那么您可以这样做:
if (get_option('last_showtime_check') < (time() - (5 * 60))) {
file_put_contents('showtimes-test.xml',
file_get_contents('http://somedomain.com/showtimes.xml'));
}
P.S。 echo var_dump($xml); // Returns "bool(false)"
- 检查您的文件网址 - 是否存在?
<强>更新强>
如果设置了正确的Accept
标头,则您尝试加载XML文件的服务器可能只提供XML文件。浏览器可能会根据文件ext自动设置它。试试第二种方法:
$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'header' => 'Accept: application/xml'
)
));
file_put_contents('showtimes-test.xml',
file_get_contents('http://somedomain.com/showtimes.xml', false, $context));