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 :

[Tableaux] Délai de traitement d'une page pas assez long [Fait]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut [Tableaux] Délai de traitement d'une page pas assez long
    Bonjour,

    Me voila avec un nouveau probleme.

    Je souhaite augmenter le delai de traitement d'une page PHP.
    Donc j'i modifié dans le php.ini la ligne

    max_execution_time = 120
    Et malheuresement le temps de depart ( 60s ) est toujours le temps utilisé par le navigateur.

    PS : En fait le traitement est long car il parcours une table ACCESS assez consequente pour ensuite créer les tables de cette base dans une base MySQL.

  2. #2
    Membre expérimenté

    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
    Points : 1 565
    Points
    1 565
    Par défaut
    tu peux faire un :

    set_time_limit(0);

    qui va te donner un temps infini... ce qui est dangeureux si t'as des boucles infinies evidemment.

    Si tu le peux, essaye plutot de faire :

    set_time_limit(1800); // 30 minutes

    au debut d'une boucle par exemple, comme ca il a 30 minutes a chaque iteration

  3. #3
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par Fladnag
    tu peux faire un :

    set_time_limit(0);

    qui va te donner un temps infini... ce qui est dangeureux si t'as des boucles infinies evidemment.

    Si tu le peux, essaye plutot de faire :

    set_time_limit(1800); // 30 minutes

    au debut d'une boucle par exemple, comme ca il a 30 minutes a chaque iteration
    Ca ne change rien, le navigateur fera quand même claquer un timeout.
    Mieux vaudrait afficher une page d'attente, et faire le calcul en arrière plan. Mais j'ai jamais fait ça, perso.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    il faut donc que je rajoute set_time_limit(x); dans la boucle.

    Mais cela veut dire que chaque boucle sera traitée pendant x secondes meme celle qui ne prennent que quelque secondes ???

    Ou bien seulement celle qui ont besoin de plus de temps ???

    N'y a-t-il pas un moyen de mettre le temps d'execution de la page entiere à une duré définie ???

    En tout cas merci de repondre aussi vite

  5. #5
    Membre expérimenté

    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
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par Alexlesilex
    N'y a-t-il pas un moyen de mettre le temps d'execution de la page entiere à une duré définie ???
    set_time_limit(durée définie en seconde);

    le set_time_limit ne fait que réinitialiser a la valeur passée en parametre un compteur qui se décrémente d'un toutes les secondes et qui, quand il passe de 1 a zero, arrete le script php.

    le set_time_limit(0); te donne un temps infini, alors tu peux l'utiliser, si tu est sur de ton code ;o)

    J'ai deja fait des scripts (en local) qui durent plus de 60 secondes (genre meme 15 ou 30mn facile) sans provoquer de timeout du navigateur... en général j'aime bien afficher des trucs de temps en temps, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (...) {
    // long traitement
    echo '.'; flush();
    }
    Ce qui va afficher un point a l'ecran a chaque fin de boucle... peut etre que ca eviterais que ton navigateur s'arrete... sinon j'utilise pas IE mais FF, je sais pas si ca a un rapport.

  6. #6
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par Fladnag
    J'ai deja fait des scripts (en local) qui durent plus de 60 secondes (genre meme 15 ou 30mn facile) sans provoquer de timeout du navigateur...
    Ben ça dépend de la configuration du navigateur, alors tu ne peux pas le contrôler... Mais ton petit bout de code avec l'affichage du point règle peut-être le problème.

    Mais si c'est un "vrai" utilisateur que tu veux faire patienter une demi-heure pour l'affichage, je le plains

  7. #7
    Membre expérimenté

    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
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par Eusebius
    Mais si c'est un "vrai" utilisateur que tu veux faire patienter une demi-heure pour l'affichage, je le plains
    lol, nan, c'est juste des scripts pour moi, genre leecher de site web, des choses de ce genre la ;o)
    En général mes plus grosses pages depassent rarement 5 secondes, et c'est deja beaucoup.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    Bon je garde la solution du set_time_limit qui marche plutot bien.

    Merci encore.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    Me revoila,

    Donc le traitement marche en entier il fait 2 min 30 ce qui est assez long.

    J'aimerai donc afficher une page d'attente pendant que le traitement s'effectue en arriere plan.

    Comment faire cela ???

  10. #10
    Membre expérimenté

    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
    Points : 1 565
    Points
    1 565
    Par défaut
    en php uniquement, je sais pas comment faire, mais tu peux imaginer le faire en utilisant aussi javascript.

    Genre :

    // affichage de la page html (merci de patienter, blablabla)
    </html>
    <?php
    flush(); // important ;o)
    // execution du script php tres long

    // fin du script :
    echo "<script>window.location='nouvellepage.php';</script>";
    ?>

    Comme ca, dès que le script
    est terminé, javascript prend la main et emene l'utilisateur sur une autre page.

    Personnellement, je prefere la solution qui consiste a afficher des points a chaque itération de boucle... mais ca fait plus "bidouille"

    (et si le nombre d'iteration est connue a l'avance, on peut meme faire un calcul pour afficher une image correspondant a 1% tout les 1%, pour avoir une sorte de barre de progression)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    merci encore.

    J'y avais pas penser mais ca parait pas mal du tout.

    Juste comme ca : Qui pense que 2min30 c'est long pour afficher une page ayant un grand nombre de données à traitées ????

  12. #12
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Citation Envoyé par Alexlesilex
    Juste comme ca : Qui pense que 2min30 c'est long pour afficher une page ayant un grand nombre de données à traitées ????
    2min30 de chargement, j'espère que c'est pas un site commercial parce que tes utilisateurs seront de trop mauvaise humeur pour te filer de la thune !

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    heureusement pour moi non

    Il n'y aura qu'un utilisateur.
    La personne qui gere la base de donnée.
    J'ai fait ce module que pour lui eviter de la faire manuellement.

    Et manuelllement, importer une base ACCESS vers MySQL c'est assez long.

    Et puis je suis pas payé, je suis en stage.

  14. #14
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    2min30 me parait très long. Quelles sont tes volumétries ?

    Pour info, set_time_limit fonctionne très bien mais comme le dit la doc : http://www.php.net/set_time_limit :

    Notez que set_time_limit() n'a pas d'effet lorsque PHP fonctionne en mode safe mode. Il n'y a pas d'autre solution que de changer de mode, ou de modifier la durée maximale d'exécution dans le php.ini.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 111
    Points : 62
    Points
    62
    Par défaut
    Si par volumétrie tu entend taille de la base ACCESS alors elle fait 70Mo.

    J'ai changer le max_execution_time mais rien n'y fait , alors que faire pour que le script mette moins de temps.

    Bon je vous explique clairement (enfin j'espere) ce que fait mon script.

    Je detruit l'ancienne base avec des drop table
    ensuite je parcours la table ACCESS table par table et pour chaque table je créé l'équivalent de celle-ci sous MySQL et aussi un fichier CSV contenant les données de la table ACCESS que j'insere ensuite dans la table MySQL créé auparavant.

    Et ainsi de suite pour toutes les tables de la base ACCESS.

    Je n'ai trouver que cette methode pour importer la base ACCESS.

    Si quelqu'un a une idée moins lourde (en temps) je suis preneur.

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

Discussions similaires

  1. [Tableaux] Modifier un tableau sur une page en PHP
    Par leclone dans le forum Langage
    Réponses: 12
    Dernier message: 02/01/2007, 14h06
  2. [Tableaux] Probleme de rechargement d'une page
    Par johnson95 dans le forum Langage
    Réponses: 2
    Dernier message: 29/11/2006, 13h06
  3. [Tableaux] passer un array d'une page à une autre
    Par 18Marie dans le forum Langage
    Réponses: 5
    Dernier message: 25/06/2006, 22h42
  4. [Tableaux] Charger le contenu d'une page dans une variable
    Par wishmastah dans le forum Langage
    Réponses: 7
    Dernier message: 15/05/2006, 16h00
  5. [Tableaux] Temps de traitement ... affichage de page
    Par mathieu77186 dans le forum Langage
    Réponses: 37
    Dernier message: 25/10/2005, 17h45

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