Documentación offline PHP master

libxml_set_external_entity_loader

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

En esta página

libxml_set_external_entity_loader

Cambia el cargador de entidades externas por defecto

Descripción#

libxml_set_external_entity_loader(callable $resolver_function): true
```php

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:

```php
resolver(string $public_id, string $system_id, array $context): resource

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

Véase también#

libxml_disable_entity_loader, libxml_get_external_entity_loader