如何解决PHP 8 - libxml_disable_entity_loader() 已被弃用如何替换它提供的功能?
函数 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);
...
因此回避了“外部”的考虑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。