【问题标题】:Simple XML Error when Parsing Script from External URL从外部 URL 解析脚本时出现简单的 XML 错误
【发布时间】:2014-02-15 20:27:11
【问题描述】:

我有一个解析 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 无法解析主机名。

感谢您的帮助!

【问题讨论】:

  • 尝试通过 curl 连接到该 url 并查看您的网络服务器是否可以访问该站点。如果您运行的是 Linux 的安全增强版本,那么运行该命令的用户可能很重要。

标签: php xml


【解决方案1】:

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 未列入黑名单

【讨论】:

  • 所以我在执行上述功能时确实收到了失败通知。从技术上讲,该文件“不存在”。 URL 字符串实际上并没有使用 www,它是站点上的子域,并且该文件甚至不是 URL 的 XML 文件,它是一个带有一堆 GET 变量的 URL,当您访问时构造 XML 文件页(我猜)。我正在使用 PHP 5.3.24,我尝试对 URL 进行 URL 编码,但仍然失败...
  • 您是否尝试过使用特定的用户代理字符串访问该 URL?我已经用脚本更新了答案的第五项。该脚本应将页面输出到屏幕。
  • 我刚刚使用了您写的脚本,但页面上没有返回任何内容。我检查了源代码,HTML 或控制台中没有任何内容。我在 Chrome 和 Firefox 上进行了检查,结果相同。这基本上是说它无法连接到这个文件吗?我也听说过一种叫做“伪 XML”的东西,不知道是不是这样......
  • 你能开始聊天吗?我不能公开发布该 URL,因为如果它出现在 Stack Overflow 上,他们不希望它出现在 Google 搜索中……非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
相关资源
最近更新 更多