libxml_set_external_entity_loader

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

libxml_set_external_entity_loaderCambia el cargador de entidades externas por defecto

Descripción

libxml_set_external_entity_loader(?callable $resolver_function): true

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().

Parámetros

resolver_function

Un callable con la siguiente firma:

resolver(?string $public_id, string $system_id, array $context): resource|string|null
public_id
El ID público.
system_id
El ID del sistema.
context
Un array que contiene cuatro elementos "directory", "intSubName", "extSubURI" y "extSubSystem".
Esta callable debería devolver un resource, un string a través del cual puede abrirse un recurso. Si se devuelve null, la resolución de referencia de entidad fallará.

Valores devueltos

Retorna siempre true.

Historial de cambios

Versión Descripción
8.5.0 El tipo de retorno es ahora true; anteriormente, era bool.

Ejemplos

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)

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top