2014-02-18 14 views
9

Ich walidating meine XML mit einer DTD-Datei, die ich lokal habe.Wie beschleunigt man die XML-DTD-Validierung mit PHP?

Dafür ich tue:

$xml    = $dmsMerrin.'/xml/'.$id.'/conversion.xml'; 
$dtd    = $dmsMerrin.'/style_files/journalpublishing.dtd'; 

$dom = new DOMDocument(); 
@$dom->load($xml); 

libxml_use_internal_errors(true); 

if (@$dom->validate()) { 
    $htmlDTDError .= "<h2>No Errors Found - The tested file is Valid !</h2>"; 
} 
else { 
    $errors = libxml_get_errors(); 
    $htmlDTDError .= '<h2>Errors Found ('.count($errors).')</h2><ol>'; 

    foreach ($errors as $error) { 
     $htmlDTDError .= '<li>'.$error->message.' on line '.$error->line. '</li>'; 
    } 

    $htmlDTDError .= '</ol>'; 
    libxml_clear_errors(); 
} 

libxml_use_internal_errors(false); 

Und das dauert etwa 30 Sekunden für eine XML mit 1600 Zeilen.

Ist das eine übliche Zeit? Sollte meiner Meinung nach viel schneller sein?

Wie Sie sehen können, ist die DTD, die ich verwende, lokal auf dem Server.

Irgendeine Idee? Vielen Dank.

EDIT: Durch Debuggen und Überprüfen der Ausführungszeit habe ich festgestellt, dass es die gleiche Zeit dauert, wenn mein XML 1600 Zeilen oder 150 Zeilen hat, so ist das Problem nicht die XML-Größe.

+0

Ich kann nicht sehen, wo Sie Ihre dtd tatsächlich verwenden? –

+0

Ah ja, ich benutze es nicht tatsächlich, die DTD ist in der XML-Datei selbst eingerichtet. Sollte ich es im PHP-Code verwenden? Wie ? –

+0

"Wie Sie sehen können, ist die DTD, die ich verwende, lokal auf dem Server." Das kann ich an deinem Beispiel nicht sehen. Ist '$ dmsMerrin' eine' Datei:/'URL? – Joe

Antwort

2

Und das dauert etwa 30 Sekunden für ein XML mit 1600 Zeilen.

Das ist eine ungewöhnlich lange Zeit, und es ist wahrscheinlich aufgrund einer Fehlkonfiguration.

Durch das Debuggen und Überprüfen der Ausführungszeit, habe ich festgestellt, dass es die gleiche Zeit dauert, wenn mein xml 1600 Zeilen oder 150 Zeilen hat, so ist das Problem nicht die xml-Größe.

Für ein Tool, das hier möglicherweise mehr Diagnosefunktionen bietet, versuchen Sie xmllint --valid. Es werden beispielsweise Fehler für DTDs angezeigt, die nicht abgerufen werden konnten.

Es ist sehr wahrscheinlich, dass die zusätzliche Zeit auf das Abrufen von Ressourcen wie der DTD zurückzuführen ist, die für die Validierung benötigt werden.

Bestätigen Sie für eine Ihrer Dateien, dass die URL der DTD schnell durch Testen mit einem Tool wie curl vom selben Server abgerufen werden kann. Ist es eine komplexe DTD? Bringt es andere Dateien? Stellen Sie insbesondere sicher, dass es sich niemals auf Ressourcen bezieht, die aus dem Web geholt werden müssen, oder auf Hostnamen, bei denen DNS langsam aufgelöst wird.