下面我有这段代码可以在我的远程托管服务器上正常工作,但由于某些原因在我的本地linux机器上工作。我也尝试使用file_get_contents来获得宁静的服务,但它也返回false。
有谁知道为什么会这样?
谢谢:)
$xml_data = simplexml_load_file("****");
if ($xml == FALSE)
{
echo "Failed loading XML\n";
foreach (libxml_get_errors() as $error)
{
echo "\t", $error->message;
}
}
答案 0 :(得分:10)
您收到此错误,因为您的服务器上已禁用远程文件访问。另一种方法是使用CURL。
使用下面的代码使用CURL:
function produce_XML_object_tree($raw_XML) {
libxml_use_internal_errors(true);
try {
$xmlTree = new SimpleXMLElement($raw_XML);
} catch (Exception $e) {
// Something went wrong.
$error_message = 'SimpleXMLElement threw an exception.';
foreach(libxml_get_errors() as $error_line) {
$error_message .= "\t" . $error_line->message;
}
trigger_error($error_message);
return false;
}
return $xmlTree;
}
$xml_feed_url = '******';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $xml_feed_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($ch);
curl_close($ch);
$cont = produce_XML_object_tree($xml);
现在使用$cont
作为对象来访问xml中的不同节点。
答案 1 :(得分:4)
答案 2 :(得分:3)
我有同样的问题,虽然我会发布这个来帮助那些可能还没有尝试过这个解决方案的人。
我有一个PHP脚本在本地工作正常,但是当在运行plesk的客户端服务器上使用它时,它在尝试获取外部xml文件时无效并且失败。
我试图从php脚本引用外部xml文件。我使用的服务器正在运行plesk。在考虑更改主机之前,我只是更新了服务器上PHP的设置,以便作为Apache模块而不是FastCGI运行。
我收到的错误消息(示例):
警告:simplexml_load_file(url)[function.simplexml-load-file]:无法打开流:权限被拒绝
这解决了我的问题。
我在PHP脚本中使用了以下报告设置:
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_BAIL, 1);
assert_options(ASSERT_QUIET_EVAL, 1);
error_reporting(E_ALL);
ini_set('display_errors', 1);
答案 3 :(得分:1)
像这样使用
$xml = simplexml_load_file('http://localhost/test/123.xml');
foreach ($xml->children() as $child) {
$remoteCount[$child->getName()] = $child;
}
var_dump($remoteCount);
答案 4 :(得分:1)
将if ($xml == FALSE)
更改为if ($xml === FALSE)
(source)。
答案 5 :(得分:0)
我遇到了同样的问题,它只是 simplexml
中一个愚蠢的未申报点xml文件格式应该有一个容器标记,因此,您只需要放置一个包含所有数据的父标记,如下所示:
<?xml version="1.0">
<data>
...all your file content here...
</data>