libxml_disable_entity_loader

(PHP 5 >= 5.2.11, PHP 7, PHP 8)

libxml_disable_entity_loader禁用加载外部实体的能力

警告

此函数已在 PHP 8.0.0 中被 弃用。强烈建议不要依赖此函数。

说明

libxml_disable_entity_loader(bool $disable = true): bool

禁用/启用加载外部实体的能力。请注意,禁用加载外部实体可能会导致加载 XML 文档时出现一般问题。但是,从 libxml 2.9.0 开始,实体替换默认情况下是禁用的,因此无需禁用加载外部实体,除非需要使用 LIBXML_NOENT 解析内部实体引用。通常,最好使用 libxml_set_external_entity_loader() 来抑制加载外部实体。

参数

disable

禁用 (true) 或启用 (false) libxml 扩展(例如 DOMXMLWriterXMLReader)来加载外部实体。

返回值

返回上一个值。

参见

添加备注

用户贡献的备注 7 备注

8
suconghou at gmail dot com
3 年前
在 PHP 8.0 及更高版本中,PHP 使用 libxml 2.9.0 及更高版本,libxml_disable_entity_loader 已被弃用。
因此,现在可以在 php8 上安全地删除所有 `libxml_disable_entity_loader` 调用。

如果您想要向后兼容性

使用此代码段

if (\PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(true);
}
8
vavra at 602 dot cz
6 年前
如果调用
libxml_disable_entity_loader(true);

,会导致新的 SoapClient(.) 失败,并出现以下错误:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'D:\path/dm_operations.wsdl' : failed to load external entity "D:\path/dm_operations.wsdl

因为此 wsdl 将 xsd 作为另一个外部文件导入。
在 php 7.1.12、win x64 上测试。
0
editor at geekkb.com
1 年前
suconghou 2 年前发布的代码中,PHP_VERSION_ID 前面多了一个反斜杠,应该删除。

if (PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(true);
}
0
phofstetter at sensational dot ch
10 年前
请注意,这还会禁用 simplexml_load_file() 中的 url 加载,以及可能其他处理 url 的基于 libxml 的函数。
0
simonsimcity
12 年前
使用此函数,您可以防止易受本地和远程文件包含攻击的攻击。

您将在以下示例中看到它,我将加载并验证以下字符串

<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>

防止返回文件的一种方法是将此值设置为 0。
请仔细查看 symfony 2.0.11 的发布。
-3
brendan at bloodbone dot ws
10 年前
如果在加载 XSLTProcessor 类的 XSLT 时应用此方法,这似乎也会影响 <xsl:import /> 语句。
-7
daschtour at me dot com
10 年前
此函数据报道不是线程安全的。因此,这可能会影响同一服务器上的 php 脚本。
To Top