2016-02-28 3 views
2

J'ai un fichier xml qui contient plus de 5000 produits (articles). C'est vraiment un gros fichier et l'exécution de l'analyse de ce fichier prend plus de 40 secondes.Problème de temps d'exécution dans php simplexml_load_file

Mon code php:

ini_set('max_execution_time', 300); 
$xml = simplexml_load_file("wwww.example.com"); 
print_r($xml); 

est-il une solution pour cela ?? par exemple en chargeant juste une partie du fichier?

+0

La mise en cache peut être une solution ou une manipulation en arrière-plan (par exemple avec un serveur Gearman). – Jan

+0

@Jan Avez-vous une source de tutoriel? Merci. –

+1

http://gearman.org/ ou http://queues.io/ Alternativement [regardez cette question ici sur SO.] (Http://stackoverflow.com/questions/3048583/what-is-the-fastest- xml-parser-in-php) – Jan

Répondre

-1

Essayez ceci sur l'en-tête du fichier php:

ignore_user_abort(true); 
set_time_limit(0); 
+1

Bien que cela puisse fonctionner, il ne rend pas l'exécution plus rapide car OP requis ... – Jan

+0

Aucune différence. Comme l'a mentionné Jan, cela ne rend pas l'exécution plus rapide. –

+1

Vous pouvez utiliser l'analyseur syntaxique SAX pour une charge rapide. Vous pouvez consulter http://php.net/manual/fr/book.xml.php –

1

Essayez d'appeler la fonction simplexml_load_file avec LIBXML_COMPACT drapeau:

$xml = simplexml_load_file("wwww.example.com",'SimpleXMLElement',LIBXML_COMPACT); 
+0

J'ai recherché 'LIBXML_COMPACT' et j'ai trouvé ceci: Activer l'optimisation de l'allocation des nœuds (peut accélérer l'application). Mais pas une grosse différence. L'analyse 'SAX' est une bonne idée, comme l'a mentionné le prince Rajput. En tout cas, merci beaucoup. –

+0

J'ai fait quelques recherches sur ce que cela fait et en regardant les docs de libxml2 il semble qu'il peut légèrement accélérer la lecture dans certains cas, mais par conséquent vous ne pouvez pas apporter de modifications au DOM plus tard. Donc, bien si tout ce que vous voulez faire est de lire, et ne pas faire des changements. Je trouve cela curieux que les docs PHP n'aient pas mentionné cette restriction, alors peut-être qu'en PHP ce n'est pas le cas ... – thomasrutter

1

XMLReader est une autre solution, comme SAX (ou expatriés), que vous permet de lire le fichier XML progressivement et il devrait être plus facile de travailler avec le premier.

Cela peut rendre les choses sensiblement plus rapides si vous n'avez pas besoin d'analyser le fichier entier et que vous pouvez arrêter quand vous avez trouvé ce que vous cherchiez.

Si vous avez toujours besoin d'analyser le fichier entier avec, il n'offrira pas une accélération.