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] Erreur "maximum time execution" [Fait]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 83
    Points : 51
    Points
    51
    Par défaut [Système] Erreur "maximum time execution"
    Salut à tous!

    Voila mon problème.
    Il faudrait que je mette le contenu d'un fichier csv dans une base de données. Pas très compliqué me direz-vous, je suis même certain qu'il marche. Cependant le fichier doit faire quelque chose comme 32 000 ligne voire plus (en gros c'est un fichier qui contient toutes les communes de france, beaucoup quoi). Mon script est donc assez long à s'éxecuter, et au bout de 30 secondes il s'arrête en me sortant l'erreur "maximum time execution".
    Est-ce que vous savez comment le forcer à aller jusqu'au bout (en gros enlever ou augmenter ce temps de d'exécution maximum) ? Et cela ne vient pas de mon script, puisque j'arrive à traiter à peu près la moitié des lignes du fichier avant que cela ne s'arrête (les tables contiennent quelques lignes à ce moment là... beaucoup même je dirais!).

    Merci d'avance!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    salut,

    les script php exéuter via un serveur web sont limités dans le temps.
    il est possible de changer cette limite (par défaut 30s) via la directive max_execution_time du php.ini.

    ceci dit, si j'avais un fichier csv à mettre en base j'utiliserai plutôt cette instruction :
    http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

    un exemple pour csv se trouve dans la doc en anglais :
    http://dev.mysql.com/doc/refman/5.0/en/load-data.html

  3. #3
    Membre averti Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Points : 353
    Points
    353
    Par défaut
    Salut ,

    Si tu peux pas accéder à ton php.ini coté serveur, tu peux essayer la fonction set_time_limit() ... mais y'a de fortes chances pour qu'elle soit désactivée ( qui ne tente rien ... )

    Sinon tu peux morceler ton fichier et passer paquet par paquet ... Tant que tu coupes pas une insctrution SQL ... Ca marche .

    Y'a des petits soft qui font ca pour toi ... ( SQLCutter de mémoire ).
    Take it HiSy

  4. #4
    Membre habitué Avatar de M1000
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2003
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 201
    Points : 186
    Points
    186
    Par défaut
    Petite recommandation si tu peux utiliser set_time_limit(X) , X étant un entier correspondant à des secondes.

    Cela est mieux plutot que de modifier le temps d'exécution du php.ini, il est bon de noter qu'il faut pour utilisé cette fonction que ton serveur php soit en safemode = off
    M1000
    Le savoir se partage et le partage est un savoir...

  5. #5
    Membre éclairé Avatar de haltabush
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    726
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 726
    Points : 835
    Points
    835
    Par défaut
    Une petite question, moi j'utiliser ini_set ("max_execution_time", "300").
    C'est équivalent à set_time_limit? Y a-t-il des chances que le ini_set soit bloqué et pas le set_time_limit? Etc

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Pour reprendre l'idée de morceler le fichier, tu peux aussi morceler son
    traitement en requêtes successives.

    en gros tu fait une boucle qui traite le fichier ligne par ligne, a chaque ligne
    tu mesure le temps de traiement avec time() par exemple. Quand tu arrives
    à x secondes, tu envoie une réponse au navigateur avec un meta refresh
    qui rappel ta page de traiement immédiatement avec un parametre line=n
    (n représente le numéro de la prochaine ligne à traiter).

    Cela te permet aussi d'afficher une barre de progression dans le navigateur,
    ce qui n'est pas un mal pour les long traitement. Mais attention, si l'utilisateur
    quitte le navigateur en cours de traitement c'est cuit :-)
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

Discussions similaires

  1. [Système] erreur lors de l'execution
    Par jadoo dans le forum Langage
    Réponses: 2
    Dernier message: 29/11/2006, 20h37
  2. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10

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