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 :

[Système] Récupérer une erreur memory_limit


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 70
    Par défaut [Système] Récupérer une erreur memory_limit
    Bonjour,

    J'ai des script de maintenance lancés la nuit avec un CRON, ils s'exécutent en processus Php sans passer par Apache.

    Or, au fur et à mesure que mon site gagne en volume de données à traiter, je m'aperçois que certains de mes scripts ne sont pas correctement optimisés : des gros fichiers xml sont chargés en mémoire avec SimpleXml, de très gros résultats de requêtes sont directement transmis dans des variables...

    Pour éviter de faire planter le serveur, en attendant d'améliorer tout ça, j'ai jugé préférable d'ajouter ini_set('memory_limit', '500M'); à mes scripts.

    Problème : lorsque la limite est dépassée, le script part en fatal_error sans que je puisse gérer proprement l'interruption.
    Comment récupérer l'erreur lorsqu'elle survient ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Certaines erreurs ne peuvent pas être capturées c'est notamment le cas de :
    E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING ainsi que la plupart des E_STRICT d'un fichier
    (voir la fonction set_error_handler).

    La valeur -1 désactive totalement cette limite sur la mémoire, que vous pourriez également passer en ligne de commande par l'option (de php) -d. Peut être devriez-vous envisager un parsing avec la méthode SAX.


    Julp.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Salut,

    Il existe une fonction (set_error_handler) permettant d'enregistrer un callback à appeler lorsqu'une erreur survient. Le problème est qu'une fatal error, par définition, nécessite l'arrêt du script et donc ne peut pas être géré par ce système.

    Une solution pourrait être de demander à php de logger les erreurs dans un fichier (log_errors = true) puis de regarder ce fichier de temps en temps pour voir si une erreur est survenue.

    Tu peux aussi voir ce commentaire qui propose une bidouille permettant de gérer les fatal error à l'intérieur du script.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 70
    Par défaut
    Merci, set_error_handler est juste ce que je recherchais.

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

Discussions similaires

  1. Récupérer une erreur SQL avec TIBDataSet
    Par cgone dans le forum Bases de données
    Réponses: 3
    Dernier message: 25/10/2006, 00h00
  2. [Système] Récupérer une valeur dans un texte
    Par Netoman dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2006, 14h54
  3. [DAO VBA] Récupérer une erreur de violation de clé
    Par Caroline1 dans le forum Access
    Réponses: 5
    Dernier message: 28/04/2006, 17h39
  4. [C#] Récupérer une erreur OleDb
    Par iDaaX dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/11/2005, 16h28
  5. Réponses: 8
    Dernier message: 13/09/2005, 21h05

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