simplexml_load_file: 无法加载外部实体(调用本地路径)

simplexml_load_file: Unable to load external entity (called for local path)

我正在尝试使用 PHP 7.2 中的 simplexml_load_file 功能。我得到

Warning: simplexml_load_file(): I/O warning : failed to load external entity  "../repositories/some.xml"

我用以下内容替换了对 simplexml_load_file 的调用:

$source = file_get_contents($path);
$xml = simplexml_load_string($source);

我现在工作得很好。 (注意 $path 是错误中列出的那个)

很遗憾,我没有任何其他信息,因为我不知道为什么会发生这种情况。问题的根源可能是什么?

我终于通过阅读问题找到了没人能找到的问题:mxgraph-php 使用 libxml_disable_entity_loader 而没有给出任何通知,这就是导致错误的原因。

对于那些使用 mxServer.php, you can simply comment/remove the line if you trust the XML files (see vulnerability example 的人):

libxml_disable_entity_loader(true);

如果不能信任XML文件,可以使用simplexml_load_string,以文件处理后的内容为参数。


注意 我没想到 mxgraph 是这个问题的根源,我在这上面花了几个小时,所以我希望它能帮助来自 Google 的人了解此警告文本。