问题描述
函数 libxml_disable_entity_loader() 已弃用
我所拥有的:这段代码保存了当前实体加载器的状态,并启用了加载器;然后加载文件;最后将实体加载器重置为其原始状态:
...
$current = libxml_disable_entity_loader(false);
$domdocument->load($filename,$options);
libxml_disable_entity_loader($current);
...
从 libxml 2.9.0 开始,实体替换默认是禁用的,所以 无需禁用外部实体的加载,除非 需要解决内部实体引用 LIBXML_NOENT。
为了测试,我删除了 libxml_disable_entity_loader() 引用,因此我拥有的:变成:
...
$domdocument->load($filename,$options);
...
但是,现在我当然明白了:
PHP 警告:DOMDocument::load():I/O 警告:无法加载外部实体
所以,我的问题是:
我需要在 PHP 8 中做什么才能摆脱 libxml_disable_entity_loader() 并仍然达到我所拥有的:
解决方法
我不能说明所有用例,但在我的所有用例中,所有负载都来自本地文件,因此我通过将 ->load() 替换为 file_get_contents() 和 ->loadXML() 的组合解决了该问题,如下所示:
...
$domdocument->loadXML(file_get_contents($filename),$options);
...
因此回避了“外部”的考虑。