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 :

[Dates] Ignore_user_abort : comment arrêter ?


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
    Août 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 163
    Par défaut [Dates] Ignore_user_abort : comment arrêter ?
    Bonjour,
    En lisant un tutorial sur ce site, j'ai vu que l'on peut utiliser dans un script la fonction ignore_user_abort pour faire tourner un script en background. Si j'ai bien compris, seul un arrêt de la machine peut arrêter le script (imaginons que se soit une boucle infinie).

    N'y a t'il vraiment pas de méthode(s) pour arrêter le script moins brutalement ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonjour,
    on ne mets jamais dans les conditions d'une boucle, un élément qui pourrait ne jamais voir le jour. En trois lignes, on autorise cet élément à n'avoir rien qu'une chance d'exister et cela évite les boucles infinies.

    S'il y a une chance que le script possède une boucle infinie, on ne l'utilise pas.

    Code test.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
     
      $i = 0;
      $fin = FALSE;
     
      do
      {
     
        $i++;
     
        if ($i === 1000) $fin = TRUE;
     
      }
      while(!$fin);
     
    ?>

    Cordialement,
    DaRiaN.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 163
    Par défaut
    Voici un squelette de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    set_time_limit(0);
    creer un socket
    do
      attendre connexion
      accepter connexion
      lire donnees
      traiter donnees
    while (TRUE);
    Par quoi veux-tu remplacer le TRUE ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonsoir,
    pourquoi me donnez-vous un exemple?

    Pas de boucle infinie! set_time_limit ne devrait jamais être à 0, mais si vous voulez le faire et que vous avez plusieurs parties sensibles, vous pouvez leur donner un temps max, à chacune d'elle :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
     
      set_time_limit(0);
     
      // partie 1
     
      $fin = FALSE;
      $max = time()+30;
     
      do
      {
     
        if (time() >= $max) $fin = TRUE;
     
      }
      while(!$fin);
     
      // partie 2
     
      $fin = FALSE;
      $max = time()+30;
     
      do
      {
     
        if (time() >= $max) $fin = TRUE;
     
      }
      while(!$fin);
     
     
    ?>
    Je ne vais pas m'attarder sur ce sujet, pour moi c'est clair.

    Cordialement,
    DaRiaN.

  5. #5
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    Hello,

    Il est tout à fait possible d'utiliser une boucle infinie, dans le cas d'un traitement comme donné en exemple, mais bien sûr le script doit alors être exécuté seul et pas dans un serveur web. Le http est un protocole de communication, pas un moyen de lancer des processus à distance.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut
    Bonjour,

    C'est un excellent moyen de faire tourner en "arrière plan" un traitement. Par exemple il est possible de faire un cron en combinant les fonctions set_time_limit() ignore_user_abort() et sleep().
    -> pour supprimer des fichiers temporaires par exemple.

    Pour votre mini-cas il y a 2 possibilités:
    - set_time_limit(XX) avec XX correspondant à la durée maxi de votre script.
    - Ou une boucle qui se termine lorsqu'une date (timestamp) est atteinte.

Discussions similaires

  1. [débutant] Comment arréter "proprement" son programme
    Par Anthony17 dans le forum Delphi
    Réponses: 3
    Dernier message: 18/05/2006, 12h49
  2. indy10 comment arrêter un tidhttp.post
    Par dvarrel dans le forum Web & réseau
    Réponses: 2
    Dernier message: 22/03/2006, 00h00
  3. Comment arréter de recevoir des spam?
    Par argon dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 01/10/2005, 20h11
  4. VBA/xl97 - Comment arrêter un timer ds user32.dll
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/09/2005, 18h45
  5. Réponses: 18
    Dernier message: 06/04/2005, 15h09

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