微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP 8 - libxml_disable_entity_loader() 已被弃用如何替换它提供的功能?

如何解决PHP 8 - libxml_disable_entity_loader() 已被弃用如何替换它提供的功能?

我正在升级PHP 8 并收到以下警告:

函数 libxml_disable_entity_loader() 已弃用

我所拥有的:这段代码保存了当前实体加载器的状态,并启用了加载器;然后加载文件;最后将实体加载器重置为其原始状态:

...
$current = libxml_disable_entity_loader(false);
$domdocument->load($filename,$options);
libxml_disable_entity_loader($current);
...

我阅读了以下有关 PHP 8 的内容

从 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 举报,一经查实,本站将立刻删除。