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

PHP & Base de données Discussion :

pb de temps maximum d'execution


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut pb de temps maximum d'execution
    bjr tlm,

    g un pb de temps maximum d'execution sur un script php. Je me suis renseigné sur le web, j'ai cru comprendre qu'il y avait 2 façons de l'augmenter:
    set('max_time_execution',int) sur le serveur
    et set_limit_time dans le script php.
    Vu que je ne suis pas administrateur du serveur, je voudrais des renseignements sur la seconde solution svp.

    Mon problème est qu'il y a beaucoup de donnéées, j'arrive a les lire mais je n'arrive pas a les copier dans ma base en locale car il y a trop de données et mon traitement dépasse les 30 secondes.

    Voici ma boucle pour lire les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     while(ocifetch($resultat)) {
        $DDATE=ociresult($resultat,1);
        $SYSCAA=ociresult($resultat,2);
        $GPS=ociresult($resultat,3);
        $SGTQS=ociresult($resultat,4);
        $NUMES=ociresult($resultat,5);
        $NBR=ociresult($resultat,6);
        echo $DDATE;echo ' ';
        echo $SYSCAA;echo ' ';
        echo $GPS;echo ' ';
        echo $SGTQS;echo ' ';
        echo $NUMES;echo ' ';
        echo $NBR;echo ' ';
        echo "<br>";
    }
    Voici ma boule pour copier mes donnees:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     while (ocifetch($lala)){
        $date=ociresult($lala,1);
        $syscaa=ociresult($lala,2);
        $gps=ociresult($lala,3);
        $sgtqs=ociresult($lala,4);
        $numes=ociresult($lala,5);
        $nbr=ociresult($lala,6);
        $sql="insert INTO historique (DDATE,SYSCAA,GPS,SGTQS,NUMES,NBR) VALUES ('$date','$syscaa','$gps','$sgtqs','$numes','$nbr')";
        $res = mysql_query($sql) or die ("requete incorrecte au niveau des statistiques du jour");
    }
    Merci d'avance

  2. #2
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    tu prends des données oracle que tu copies dans une base SQL ? sympa...

    sinon, si c'est vraiment ça le problème, c'est set_time_limit() la fonction.

    Tu mets juste le nombre de secondes que tu veux en argument... Si c'est pas toi qui administre le serveur, il est fort possible que le responsable bloque cette fonction, auquel cas il faudra le contacter...

    Pour connaître ta limite de temps actuelle, tu affiches le retour de ini_get('max_execution_time')

  3. #3
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut
    en ajoutant set_time_limit(60); avnt ma boucle ou dedans, ca ne fonctionne, il me dit que la fonction n'est pas reconnu...
    c'est sympa d'oracle a sql ms c chiant lol

  4. #4
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    tu peux mettre le message d'erreur svp ?

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    si tu n'est pas administrateur, y a de forte chances pour la fonction set_time_limit() ait été désactivée... donc normal qu'il ne la reconnaisse pas, donc ce n'est pas une bonne solution.

    Essaye de revoir ton algorithme pour le découper en "morceaux" executables l'un apres l'autre par exemple, a l'aide de header("Location: ..."); ou de liens cliquables... ou encore ameliore ton code pour augmenter ses performances et le terminer dans les 30 sacro saintes secondes ;o)

  6. #6
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut
    Je ne vois pas comment je pourrais améliorer mon code pour le rendre plus rapide, car je dois forcément faire un INSERT dans ma base localMySQL de mes données venant de Oracle... arf arf

  7. #7
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 140
    Par défaut
    tu fermes bien ta connexion oracle avant de lancer celle de mysql ? (je sais pas si ça a un rapport mais peut être)

  8. #8
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    ce n'est certainement pas UN insert qui prend 30 secondes. et meme si c'est le cas, tu peux essayer d'ajouter DELAYED, ou encore ajouter/enlever des clés pour optimiser la requete.

    Si tu as plusieurs INSERT, c'est donc que ton traitement est découpable en portion pouvant etre executées en plusieurs fois (avec un lien "Cliquez pour continuer") ce qui est envisageable si c'est pour une interface administrateur uniquement, balance pas ce genre de script a l'utilisateur lambda ;o)

  9. #9
    Membre éclairé Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Par défaut
    Je ne peux pas fermer la connexion Oracle, car je lis les données sur le serveur Oracle pour les copier sur mon serveur MySQL local...

    La solution serait une requête imbriquée du genre "INSERT (dans ma base local MySQL) VALUES (SELECT(les donnees du serveur Oracle))", mais bon ça serait tro facile, je suis sous PHP4, donc Good Bye les requêtes imbriquées.

    Je ne peux pas non plus mettre de lien pour cliquer pour continuer le telechargement, ca serait trop long...

    Je ne sais plus comment faire tssss

  10. #10
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Citation Envoyé par johnkro
    Je ne peux pas non plus mettre de lien pour cliquer pour continuer le telechargement, ca serait trop long...
    Qu'est-ce qui serait trop long ?

    Si c'est le temps passé a coder, faut savoir ce que tu veux...
    Si c'est le nombre de fois a cliquer sur "suivant", ce nombre correspond au temps qu'il te faut pour charger toute ta base divisé par 30 secondes environ (mettons 25 pour plus de prudence)

    Je te dit pas de faire une page "suivant" par requete INSERT, mais de benchmarker ton algo et de mettre un lien "suivant" si tu t'approche trop de la limite des 30 secondes. Il me semblais qu'un script de ce genre avait été fait pour dumper une base par Yogui dans le sujet "Vos Meilleurs Codes Sources", mais je n'arrive pas a le retrouver. Ca ne correspondait pas exactement a ce que tu cherches, mais ca fonctionnait de la meme maniere, en verifiant qu'on ne s'approche pas trop de la limite des 30 secondes, puis en affichant un lien.

    A noter que si tu as VRAIMENT la flemme d'appuyer sur suivant toute les 30 secondes, tu peux aussi generer non pas un lien suivant mais un script javascript qui va recharger la page (et tu n'a qu'a le laisser tourner)

    Si tu veux pas de javascript, tu peux aussi faire un header("Location: ..."); vers la suite de la page, mais attention avec cette methode, les navigateurs sont limités dans le nombre maximum autorisées de redirection (il me semble que c'est 30 pour IE) mais rien ne t'empeche d'afficher un lien (ou du javascript) a la 29ieme redirection.

    Tout ca pour dire que je ne vois pas ce qui est "trop long" ;o)

Discussions similaires

  1. [Système] Erreur "maximum time execution"
    Par jason69 dans le forum Langage
    Réponses: 5
    Dernier message: 04/04/2007, 08h15
  2. [Directives] Augmenter le temps maximum d'exécution
    Par wided_instm dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 13/11/2006, 10h31
  3. Réponses: 16
    Dernier message: 11/07/2006, 11h30
  4. Temps maximum pour le timeout ?
    Par Etanne dans le forum ASP
    Réponses: 4
    Dernier message: 04/05/2006, 11h15
  5. [MySQL] Afficher le temps mis pour executer une requête SQL
    Par micatmidog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/09/2005, 11h23

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