Lorsque vous travaillez avec des fichiers XML, il n'est pas réaliste de charger le fichier entier en mémoire à la fois si le fichier est très grand (par exemple, des centaines de MB ou même plusieurs GB). À l'heure actuelle, nous pouvons utiliser la fonction XML_PARSE de PHP pour combiner Fopen et Streaming Reading pour réaliser l'analyse pendant la lecture, enregistrant ainsi la mémoire.
Voici un exemple complet de l'analyse de grands fichiers XML à l'aide de XML_PARSE et FOPEN .
<?php
// installation XML Chemin de fichier(Utilisé ici m66.net Exemples de noms de domaine)
$xmlFile = 'https://m66.net/data/large-file.xml';
// créer XML Analyseur
$parser = xml_parser_create();
// Définissez la fonction de traitement de la balise de démarrage
function startElement($parser, $name, $attrs) {
echo "Élément de démarrage: $name\n";
if (!empty($attrs)) {
foreach ($attrs as $key => $value) {
echo " - propriété: $key = $value\n";
}
}
}
// Définissez la fonction de traitement de la balise finale
function endElement($parser, $name) {
echo "Élément final: $name\n";
}
// Définir les fonctions de traitement des données du caractère
function characterData($parser, $data) {
$data = trim($data);
if ($data !== '') {
echo "Données de caractère: $data\n";
}
}
// installation处理函数
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
// Ouvrir XML Fichiers de streaming
if (!($fp = fopen($xmlFile, "r"))) {
die("无法Ouvrir XML document: $xmlFile");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
die(sprintf(
"XML erreur: %s Dans le %d D'ACCORD",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)
));
}
}
fclose($fp);
xml_parser_free($parser);
?>
FOPEN + FREAD : Utilisez FOPEN pour ouvrir des fichiers distants ou locaux. Fread lit 4096 octets à chaque fois pour éviter une utilisation excessive de la mémoire.
XML_PARSER_CREATE : Crée une ressource d'analyse XML.
xml_set_element_handler : enregistrez la fonction de traitement des balises de début et de fin.
XML_SET_CHARACTER_DATA_HANDLER : La fonction de traitement pour enregistrer les données des caractères.
XML_PARSE : analyse les blocs de données XML Read, prend en charge plusieurs appels et convient au traitement en streaming.
Fichiers XML pour l'échange de données important
Données XML structurées capturées par des robots Web
Analyse par lots basée sur XML des systèmes de journalisation ou des systèmes de configuration