(PHP 5 >= 5.4.0, PHP 7, PHP 8)
libxml_set_external_entity_loader — Cambia el cargador de entidades externas por defecto
Cambia el cargador de entidades externas por defecto.
Esto puede ser utilizado para reprimir la expansión de entidades externas arbitrarias
para prevenir ataques XXE, incluso si LIBXML_NOENT
ha
sido definida para la operación respectiva, y esto es generalmente preferible
a llamar a libxml_disable_entity_loader().
resolver_function
Un callable con la siguiente firma:
public_id
system_id
context
"directory"
, "intSubName"
,
"extSubURI"
y "extSubSystem"
.
null
, la resolución de referencia de entidad fallará.
Ejemplo #1 Ejemplo con libxml_set_external_entity_loader()
<?php
$xml = <<<XML
<!DOCTYPE foo PUBLIC "-//FOO/BAR" "http://example.com/foobar">
<foo>bar</foo>
XML;
$dtd = <<<DTD
<!ELEMENT foo (#PCDATA)>
DTD;
libxml_set_external_entity_loader(
function ($public, $system, $context) use($dtd) {
var_dump($public);
var_dump($system);
var_dump($context);
$f = fopen("php://temp", "r+");
fwrite($f, $dtd);
rewind($f);
return $f;
}
);
$dd = new DOMDocument;
$r = $dd->loadXML($xml);
var_dump($dd->validate());
?>
El ejemplo anterior mostrará :
string(10) "-//FOO/BAR" string(25) "http://example.com/foobar" array(4) { ["directory"] => NULL ["intSubName"] => NULL ["extSubURI"] => NULL ["extSubSystem"] => NULL } bool(true)