libxml_set_external_entity_loader
デフォルトの外部エンティティローダーを変更する
&reftitle.description;
boollibxml_set_external_entity_loader
callablenullresolver_function
デフォルトの外部エンティティローダーを変更します。
たとえ LIBXML_NOENT が個別のXMLの操作に設定されている場合でも、
XXE攻撃を避けるために、任意の外部エンティティの展開を抑制するために使うことができます。
また、 libxml_disable_entity_loader を呼び出すことよりも、この関数を呼び出すほうが通常は好ましいです。
&reftitle.parameters;
resolver_function
次のシグネチャを持つ callable を指定します。:
resourcestringnullresolver
stringpublic_id
stringsystem_id
arraycontext
public_id
パブリック ID
system_id
システムID
context
4つのキーを持つ配列。
キーは "directory", "intSubName",
"extSubURI", "extSubSystem" です。
この callable は、
リソースまたはリソースをオープンできる文字列あるいは
&null; でなければなりません。&null; を返す場合、エンティティ参照の解決は失敗します。
&reftitle.returnvalues;
&return.success;
&reftitle.examples;
libxml_set_external_entity_loader の例
bar
XML;
$dtd = <<
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());
?>
]]>
&example.outputs;
NULL
["intSubName"] => NULL
["extSubURI"] => NULL
["extSubSystem"] => NULL
}
bool(true)
]]>
&reftitle.seealso;
libxml_disable_entity_loader
libxml_get_external_entity_loader