php simplexml_加载_文件不工作

w8biq8rn  于 2023-01-12  发布在  PHP
关注(0)|答案(7)|浏览(135)

下面这段代码在我的远程托管服务器上运行良好,但由于某种原因在我的本地Linux机器上却不能运行。我也尝试过使用file_get_contents来获取restful服务,但它也返回false。
有人知道为什么会这样吗?
谢谢:)

$xml_data = simplexml_load_file("****");

if ($xml == FALSE)
{
  echo "Failed loading XML\n";

  foreach (libxml_get_errors() as $error) 
  {
    echo "\t", $error->message;
  }   
}
4uqofj5v

4uqofj5v1#

出现此错误是因为您的服务器已禁用远程文件访问。另一种方法是使用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中的不同节点。

q3qa4bjr

q3qa4bjr3#

嗯,我有同样的问题,虽然我会张贴这一点,以帮助任何人谁可能还没有尝试过这个解决方案。
我有一个PHP脚本,它在本地工作得很好,但是当在运行plesk的客户端服务器上使用它时,它不会工作,并且在试图获取外部xml文件时失败。
我试图从一个php脚本引用一个外部xml文件。我使用的服务器正在运行plesk。在考虑更换主机之前,我所做的只是更新服务器上的PHP设置,使其作为Apache模块而不是FastCGI运行。
我收到的错误消息(示例):
警告:简单表达式加载文件(url)[函数.简单表达式加载文件]:无法打开流:权限被拒绝
这解决了我的问题。
我在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);
fjaof16o

fjaof16o4#

像这样使用

$xml = simplexml_load_file('http://localhost/test/123.xml');

foreach ($xml->children() as $child) {
    $remoteCount[$child->getName()] = $child;

}
var_dump($remoteCount);
35g0bw71

35g0bw715#

变更:将if ($xml == FALSE)变更为if ($xml === FALSE)(源代码)。

m528fe3b

m528fe3b6#

我遇到了同样的问题,只是simplexml中有一个愚蠢的未声明点
xml文件格式应该有一个container标签,所以,你只需要放一个包含你所有数据的parent标签,如下所示:

<?xml version="1.0">
<data>
    ...all your file content here...
</data>

相关问题