IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Parse XML : augmenter la mémoire ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut Parse XML : augmenter la mémoire ?
    Bonjour,

    Je suis actuellement en train de développer une application en PHP dans le cadre d'un stage en entreprise.
    J'utilise NetBeans pour programmer et XAMPP-Apache comme serveur.
    En ce qui concerne mon PC, voici sa config :
    Pentium(R) Dual-Core CPU
    E5400 @ 2.70GHz 1.18GHz
    1.96GB of RAM
    Je tourne sous XP

    Mon script charge des flux XML via la méthode simplexml_load_file. Ces flux contiennent plusieurs milliers de lignes, ce qui les rends un peu lourd (~35MO). A partir du 7ème flux, j'ai une erreur de ce type qui apparaît:
    Warning: simplexml_load_file() [function.simplexml-load-file]:
    ...
    parser error : Memory allocation failed : xmlSAX2Characters in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 93

    Warning: simplexml_load_file() [function.simplexml-load-file]:
    ...
    parser error : out of memory error in D:\xampp\htdocs\PhpProject1\controleur\gerer_rapport_emission.php on line 93
    Les 6 premiers flux sont parfaitement parcourus, puis apparaissent ces erreurs pour les flux suivants.
    Je dois préciser qu'une fois le flux chargé dans un objet, et les informations visées récupérées, je détruit l'objet avec unset() avant de faire mon traitement et de passer au flux suivant.
    Je pense donc que cela vient du serveur. Mais pour être honnête, je n'y connais rien en serveur!

    Donc voici ce que j'ai déjà fait:
    - changer la valeur de memory_limit dans le php.ini. Elle était à 128M, je l'ai passée à 300M,
    - ajouter ligne php_value memory_limit à 300M dans .htaccess (librairie),
    - ajouter ligne ini_set('memory_limit', '300M') dans mon script,
    - ajouter lignes :
    php_value memory_limit à 300M,
    extension = pdo.so
    extension = pdo_sqlite.so
    extension = sqlite.so
    extension = pdo_mysql.so dans .htaccess (sqli, il me semble)
    - ajouter la copie de php.ini dans apache/bin
    Et ça ne fonctionne toujours pas. Alors, ai-je fait quelque chose de travers, manque t'il quelque chose ou, finalement, ne s'agirait-il pas d'autre chose?

  2. #2
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2012
    Messages : 77
    Points : 85
    Points
    85
    Par défaut
    J'ai changé de méthode pour la lecture des flux XML.
    J'utilise XMLReader a présent, qui est quand même beaucoup plus performant.
    Le problème mémoire a donc disparu pour le moment mais... je suppose que je ne l'ai que retardé. Ma question reste donc d'actualité!

  3. #3
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    Avec la fonction ini_set() tu peux changer la configuration de php le temps de l'exécution d'un script. Par exemple, si tu prévois de lire des fichiers XML qui font plus de 100 Mo, tu peux mettre dans ton script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('memory_limit','128M');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XML] [EXPAT] Parsing XML et tableau global
    Par GLDavid dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/02/2006, 12h31
  2. [DOM] Probleme de parsing Xml en java
    Par bolivari dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 25/01/2006, 19h42
  3. parsing xml en francais
    Par ouioui2000 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/10/2005, 17h03
  4. [JSP] Parsing XML avec JDOM
    Par benben13 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 26/08/2005, 17h19
  5. [MFC] Augmentation en mémoire
    Par pitch21 dans le forum MFC
    Réponses: 21
    Dernier message: 20/07/2004, 13h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo