Ciao
Sto scrivendo delle funzioni in una classe che mi servono per aprire un file xml fare la validazione e parsarlo poi successivamente in un array.
Il problema è che non entra in funzione l'handler che ho assegnato alla funzione xml_set_external_entity_ref_handler per cui se nell'xml ho nella prima riga un DTD esterno come
codice:
<?xml version="1.0"?> 
<!DOCTYPE registry SYSTEM "application.dtd">
non mi valida l'xml in base al DTD.
Io volgio che preso in input il file xml lo validi in base al DTD per verificare la correttezza del documento.Il problema è solo per l'handler external_entity_ref del resto se nell'xml ci sono errori me li segnala correttamente..
Vi posto le funzioni della classe per l'xml:

Codice PHP:
class Xml {

    function 
parserDefaultHandler($base) {
        if (!(
$fp fopen($base'r')))
            die(
sprintf("Error opening file: %s not found\n"$filename));
        
$parser xml_parser_create();
        
xml_set_external_entity_ref_handler($parser'parserExternalEntityRefHandler');
        return array(
$fp$parser);
    }

    function 
parserExternalEntityRefHandler($parser$entityNames$base$systemId$publicId) {
        if (
$systemId == '')
            return 
false;
        list(
$fp$parser)= $this->parserDefaultHandler($systemId);
        while (
$line fread($fp4096)) {
            if (!
xml_parse($parser$linefeof($fp)))
                die(
sprintf("Error parsing %s:%s\n",$filenamexml_error_string(xml_get_error_code($parser))));
        } 
        
xml_parser_free($parser);
        return 
true;
    }

    function 
parseXML($base) {
        list(
$fp$parser) = $this->parserDefaultHandler($base);
        while (
$buffer[] = $line fread($fp4096)) {
            if (!
xml_parse($parser$linefeof($fp)))
                die(
sprintf("Error parsing %s:%s\n",$filenamexml_error_string(xml_get_error_code($parser))));
        }
        
xml_parse_into_struct($parser$buffer, &$data, & $indexes);
        
xml_parser_free($parser);
        return 
$data;
    }

non capisco Dove sbaglio ??