(PHP 5 >= 5.4.0, PHP 7, PHP 8)
libxml_set_external_entity_loader — Change le chargeur d'entités externes par défaut
Change le chargeur d'entités externes par défaut.
Ceci peut être utilisé pour réprimer l'expansion d'entités externes arbitraire
pour prévenir les attaques XXE, même si LIBXML_NOENT
a
été définie pour l'opération respective, et ceci est généralement préférable
à appeler libxml_disable_entity_loader().
resolver_function
Un callable avec la signature suivante :
public_id
system_id
context
"directory"
, "intSubName"
,
"extSubURI"
et "extSubSystem"
.
null
est retourné, la résolution de
référence d'entité échouera.
Cette fonction retourne true
en cas de succès ou false
si une erreur survient.
Exemple #1 Exemple avec 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());
?>
L'exemple ci-dessus va afficher :
string(10) "-//FOO/BAR" string(25) "http://example.com/foobar" array(4) { ["directory"] => NULL ["intSubName"] => NULL ["extSubURI"] => NULL ["extSubSystem"] => NULL } bool(true)