Test de la solution fichier XML
Jump to navigation
Jump to search
Test
Un script a été utilisé pour créer un fichier de logs de 30000 entrées.
#!/bin/bash i=0 echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > logs.xml echo "<!DOCTYPE logs SYSTEM \"logs.dtd\">" >> logs.xml echo "<logs>" >> logs.xml while [ $i -lt 10000 ] do echo " <log>" >> logs.xml echo " <date>`date`</date>" >> logs.xml echo " <login>login$i</login>" >> logs.xml echo " <droits>droits</droits>" >> logs.xml echo " <operation>connexion</operation>" >> logs.xml echo " <tables>" >> logs.xml echo " </tables>" >> logs.xml echo " </log>" >> logs.xml echo " <log>" >> logs.xml echo " <date>`date`</date>" >> logs.xml echo " <login>login$i</login>" >> logs.xml echo " <droits>droits</droits>" >> logs.xml echo " <operation>modification</operation>" >> logs.xml echo " <tables>" >> logs.xml echo " <tab id=\"table1\">" >> logs.xml echo " <champ id=\"champ1\">valeur1</champ>" >> logs.xml echo " </tab>" >> logs.xml echo " <tab id=\"table2\">" >> logs.xml echo " <champ id=\"champ2\">valeur2</champ>" >> logs.xml echo " </tab>" >> logs.xml echo " </tables>" >> logs.xml echo " </log>" >> logs.xml echo " <log>" >> logs.xml echo " <date>`date`</date>" >> logs.xml echo " <login>login$i</login>" >> logs.xml echo " <droits>droits</droits>" >> logs.xml echo " <operation>deconnexion</operation>" >> logs.xml echo " <tables>" >> logs.xml echo " </tables>" >> logs.xml echo " </log>" >> logs.xml i=$(($i+1)) done echo "</logs>" >> logs.xml
La DTD utilisée pour le fichier XML étant la suivante :
<?xml version="1.0" encoding="utf-8"?> <!ELEMENT logs (log*)> <!ELEMENT log (date, login, droits, operation, tables)> <!ELEMENT date (#PCDATA)> <!ELEMENT login (#PCDATA)> <!ELEMENT droits (#PCDATA)> <!ELEMENT operation (#PCDATA)> <!ELEMENT tables (tab*)> <!ELEMENT tab (champ*)> <!ATTLIST tab id CDATA #REQUIRED> <!ELEMENT champ (#PCDATA)> <!ATTLIST champ id CDATA #REQUIRED>
Temps nécessaire à la création du fichier de logs : 1 minute 31 secondes.
Ensuite, un script PHP est utilisé pour faire une requète sur le fichier logs.xml créé et pour chronometrer le temps necessaire à l'obtention du résultat. La requète consiste à demander combien d'opérations ont été effectuées par la personne ayant l'identifiant 'login15'.
<?php $temps = microtime(); $temps = explode(' ', $temps); $debut = $temps[1] + $temps[0]; $file = "logs.xml"; $depth = array(); $last_name = ""; $n = 0; function startElement($parser, $name, $attrs) { global $depth; global $last_name; $last_name = $name; $depth[$parser]++; } function endElement($parser, $name) { global $depth; $depth[$parser]--; } function characterData($parser, $data) { global $n; global $depth; global $last_name; if(($last_name == "LOGIN") && ($data == "login15")) { $n++; } } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if(!($fp = fopen($file, "r"))) { die("could not open XML input"); } while($data = fread($fp, 4096)) { if(!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error : %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } echo 'Nombre d\'opérations effectuées par login15 : '.$n.'
'; xml_parser_free($xml_parser); $temps = microtime(); $temps = explode(' ', $temps); $fin = $temps[1] + $temps[0]; echo 'Page générée en '.round(($fin - $debut), 6).' secondes.'; ?>
Résultat
Nombre d'opérations efféctuées par login15 : 3
Le résultat est exact.
- taille du fichier log : 6.8 Mo
- temps de traitement de la requète : 5.8 s