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

Doctrine2 PHP Discussion :

Lors d'un traitement de données : "Maximum execution time of 30 seconds exceeded (UnitOfWork line 443)"


Sujet :

Doctrine2 PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 8
    Points
    8
    Par défaut Lors d'un traitement de données : "Maximum execution time of 30 seconds exceeded (UnitOfWork line 443)"
    Problème de timeout lors d'un traitement de données
    Maximum execution time of 30 seconds exceeded in [...]/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php on line 443

    Bonjour à tous,

    Plutôt habitué à d'autres environnements de dev (J2EE, VS...), je viens de m'inscrire sur ce forum parce que j'ai un problème de timeout avec Symfony 2.0.12 et/ou Doctrine.
    Je n'ai rien trouvé de très parlant sur le net, alors voila...

    Mon programme copies des données de facturation d'une table "import" vers une autre "factures" en faisant une série de vérifications pour chaque ligne à copier.
    Donc j'ai une boucle foreach pour chaque ligne, avec des tests, des update entre entités, etc... et ça fonctionne très bien quand j'ai moins de 400 lignes. Au-delà, j'ai ce timeout :
    Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/...../vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php on line 443

    C'est une application interne, donc ça n'est pas grave si l'utilisateur doit attendre 2 minutes, du moment que le travail est fait au final (!).

    Quelqu'un pourrait me dire quel paramètre changer pour modifier ce timeout ?

    Si jamais c'est pas possible, j'ai d'autres options :
    - Recharger la page toutes les 300 lignes traitées, mais je ne vois pas comment faire (pratiquement)
    - Utiliser des requêtes SQL (et oublier les entités), mais bof...

    Merci d'avance !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    Ce n'est pas un problème lié à Symfony, c'est la configuration de ton installation WAMP ou LAMP:
    http://php.net/manual/en/function.set-time-limit.php
    http://davidwalsh.name/increase-php-...-limit-ini_set
    selon la configuration de ton serveur tu ne pourras peut-être pas redéfinir ce paramètre directement dans le code.

    note:
    - si tu fais tes tests en environnement de dev, ce sera forcément plus long (donc plus de chance de tomber dans le timeout)
    - il faut penser à libérer la mémoire lorsque l'on fait des traitements de masse avec Doctrine: http://docs.doctrine-project.org/en/...rocessing.html
    - pour des traitements long il est préférable de passer par une commande symfony (http://symfony.com/doc/2.0/component...roduction.html)
    - en créant un service pour ton traitement tu pourrais l'appeler aussi bien d'un controller que d'une ligne de commande

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 8
    Points
    8
    Par défaut
    Effectivement, c'est bien un timeout paramétrable dans PHP, merci !

    J'ai modifié max_execution_time dans le php.ini et ça a marché.

    Ensuite, j'ai remis max_execution_time à 30 (parce que le serveur est utilisé par d'autres appli), et utilisé la fonction PHP set_time_limit.

    J'avais déjà testé cette dernière, mais je l'avais mal placée dans mon code : il fallait la mettre dans la boucle foreach puisqu'elle remet la valeur du compteur de temps à zéro à chaque appel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ...
    {
      set_time_limit(10) ;
      ... // traitement
    }
    Merci !

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

Discussions similaires

  1. [Wamp] Erreur instantannée -> Fatal error: Maximum execution time of 30 seconds exceeded
    Par Villon dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 05/12/2012, 10h56
  2. Fatal error: Maximum execution time of 30 seconds exceeded
    Par dubitoph dans le forum Doctrine2
    Réponses: 5
    Dernier message: 19/12/2011, 08h47
  3. [EasyPHP] Maximum execution time of 3000 seconds exceeded
    Par laurentSc dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 22/11/2011, 11h51
  4. [MySQL] Maximum execution time of 300 seconds exceeded
    Par 19cmos83 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/06/2009, 04h45

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