无法加载和存储XML字符串

时间:2015-11-10 14:41:24

标签: php xml curl

我试图读取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');

}

1 个答案:

答案 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));