从外部URL解析脚本时出现简单的XML错误

时间:2014-02-13 01:11:08

标签: php xml

我有一个解析XML文件并将其保存到数据库的脚本。我试图从外部URL获取XML文件,但它不起作用。但是,当我在本地测试脚本时,它确实有效。例如,我转到我正在尝试解析的URL,将该文件保存到我的计算机,将其上传到我的服务器并使用此脚本:

$url = 'sample_xml/sample.xml';
$xml = simplexml_load_file($url);

工作正常。当我尝试运行相同的脚本但我将实际的url替换为$ url变量时,我收到此错误:

Warning: simplexml_load_file(): Couldn't resolve host name in /foo/foo.php on line 12 

我试图解析的服务器是否可能不允许它?我没有问题在浏览器窗口中提取XML文件,它不是受密码保护的网站或其他任何东西,所以我想知道为什么simplexml_load_file无法解析主机名。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

1)尝试加载或不加“www。”

2)您是否尝试按照PHP网站simplexml_load_file(我的意思是使用file_exists())所述加载它?:

<?php
// The file test.xml contains an XML document with a root element
// and at least an element /[root]/title.

if (file_exists('test.xml')) {
    $xml = simplexml_load_file('test.xml');

    print_r($xml);
} else {
    exit('Failed to open test.xml.');
}
?>

3)据说,PHP版本应不低于5.1.0版本(否则你需要使用urlencode()

4)您的网址是否包含任何非拉丁字符?

5)在某些主机上,url访问权限取决于请求它的用户代理字符串。

<?php
$url = "http://example.com/"; // replace with your url

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
// the line below makes the common user agent to be present in the request:
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
$data = curl_exec($ch);
curl_close($ch);

echo $data;
?>

6)确保运行脚本的IP未列入黑名单