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 :

sript qui s'execute plus longtemps que 30 secondes


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
    Mars 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 71
    Par défaut sript qui s'execute plus longtemps que 30 secondes
    Bonjour,

    j'ai un script qui tourne sur une boucle qui peut dépasser les 30 seconde par contre sur l'hébergement que j'ai je n'ai pas accès au php.ini comment est-il possible de permettre à un script de durée plus longtemp que 30 secondes.

    merci de votre aide

  2. #2
    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
    Theoriquement : c'est impossible

    Maintenant... tout depend de ton traitement, si il est fractionnable, de comment tu souhaite qu'il soit executé, etc...

    je m'explique :

    Deja, tu peux "compter" le nombre de secondes d'execution de ton traitement avec une simple différence de time() entre le debut de ton script et la position actuelle dans ton script, tu peux donc en déduire le temps restant approximatif

    Si ce temps s'approche trop de sa "limite", tu peux :

    ** Solution 1 **
    Arreter ton traitement et afficher un lien vers la meme page avec un parametre dans l'url pour poursuivre le traitement a partir d'une certaine occurence de boucle.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for($i=$_GET['iteration']; $i<$max; $i++) {
    // traitement
    // calcul $temps_restant
    if ($temps_restant < 2) {
    die("<a href='?iteration=$i'>Cliquez ici pour continuer</a>");
    }
    }
    Le probleme de cette solution c'est qu'elle demande une invervention de l'utilisateur, si il clique pas... ben ca fait rien ;o)

    ** Solution 2 **
    Si ton traitement est fait AVANT tout affichage html, tu peux faire le meme code qu'au dessus mais sans intervention de l'utilisateur...
    il suffit de remplacer le die() par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header("Location: script.php?iteration=$i");
    die();
    Cela aura pour effet de rediriger vers la meme page... donc a nouveau execution du script php... donc on a 30 secondes supplémentaire ! Magique !
    Attention tout de meme, si tu fait plusieurs redirections, certains navigateurs interrompent eux meme le traitement pour eviter les boucles infinies. Il me semble que IE s'arrete au dela de 30 redirections... ca te fait quand meme 30*30 secondes = 900s soit 15mn...

    A noter aussi que comme tu n'a pas le droit d'afficher de l'html avant de faire un header, tu ne peux pas avertir l'utilisateur que le traitement sera long... donc si l'utilisateur interrompt le chargement de la page... ton traitement sera effectué partiellement, ca peut etre dangeureux ;o)


    Les 2 solutions ci dessus ont une faiblesse toutefois :
    Comme tout le traitement ne se fait pas sur la meme "page", toutes les variables initialisées dans ta boucle (comme par exemple les eventuels messages d'erreurs liés a l'execution de chaque portion de traitement) ne sont pas initialisés dans la page suivante. Il convient donc de les "passer" d'une page a l'autre, soit via l'url a nouveau, mais ca peut vite devenir lourd, et peut etre dangeureux également, soit par une session, ce qui est a mon avis la meilleure solution. Tant qu'a faire, tu peux aussi passer la variable $iteration par la session ;o)

  3. #3
    Membre chevronné Avatar de johweb
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Par défaut
    Solution 3 : en début de traitement ^^

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 71
    Par défaut
    Citation Envoyé par johweb
    Solution 3 : en début de traitement ^^
    Bonjour,

    Merci de vos réponses et j'ai juste une question complémentaire, concernant set_time_limite(0) y a t il une configue particulière qui peut le bloquer ou cela fonctionne t il toujours.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Par défaut
    precision....extrait du manuel php
    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 fichier de configuration.

  6. #6
    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 Re: sript qui s'execute plus longtemps que 30 secondes
    Citation Envoyé par e-m.guillaume
    sur l'hébergement que j'ai je n'ai pas accès au php.ini comment est-il possible de permettre à un script de durée plus longtemp que 30 secondes.
    Quelque chose me dit que si il a pas acces au php.ini, le set_time_limit restera sans effet... et c'est bien normal ! Je n'en ai donc pas parlé en effet

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 71
    Par défaut Re: sript qui s'execute plus longtemps que 30 secondes
    Citation Envoyé par Fladnag
    Citation Envoyé par e-m.guillaume
    sur l'hébergement que j'ai je n'ai pas accès au php.ini comment est-il possible de permettre à un script de durée plus longtemp que 30 secondes.
    Quelque chose me dit que si il a pas acces au php.ini, le set_time_limit restera sans effet... et c'est bien normal ! Je n'en ai donc pas parlé en effet
    Effectivement je ne peut rien faire d'autre que d'utiliser ta methode Fladnag car le serveur a PHP qui fonctionne en mode "safe mode".

    Mais cela n'est pas dramatique car cela concerne simplement mon espace de teste que j'utilise chez free donc pour ce genre de page je n'ai plus qu'a le tester directement sur mon hébergement ou la j'ai un peut plus de possibilités dont l'utilisation de .htaccess mais qui ne fonctionne plus sur free non plus.
    ( le but de ce srcipt est de transmettre un email automatique à l'ensemble des membres d'un site après la récupération des données dans la table des membres). et surtout un script de upload pour des fichiers un peut volumineu, mais la il ne me reste plus qu'a utiliser les fonctions "ftp" .

    encore merci de votre aide.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/06/2012, 18h55
  2. [9.2i] Jobs qui ne s'executent plus
    Par pholos dans le forum Oracle
    Réponses: 3
    Dernier message: 04/09/2007, 09h15
  3. Réponses: 1
    Dernier message: 27/08/2006, 15h16

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