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 :

Boucle en CLI qui perd du temps ?


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Points : 537
    Points
    537
    Par défaut Boucle en CLI qui perd du temps ?
    Bonjour,
    j'ai un script DOS (.bat) qui active en mode CLI un script PHP.
    Le script DOS active le serveur APACHE dans la foulée le script PHP qui lui-même active (ou non) des procédures PHP programmées dans une table MYSQL puis s'endort une minute, et reboucle sur le début.
    Bref, un système de BATCHS sans accès au compte systeme !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # =================================================================== Début de la procédure require_once "../../standards/classes/commande.class.php"; # Fonctions standard de contexte de commande $UneCommande = new Commande(); list($Module,$Message) = $UneCommande->DebuterCommande(); # début de commande set_time_limit(0); # script de durée illimitée ignore_user_abort(); # la tâche se poursuit après la fermeture du navigateur # =================================================================== Corps de la procédure # ------------------------------------------------------------------- Boucle infinie $Passage = 0; $Periode = 60; # La précision des lancements de tâches est à la minute prés while(1) { # --------------------------------------------------------------- Quelle heure ? (à la minute) $Jour = $UneCommande->ConvertirJour(date("l")); $Heure = str_pad(date("H"),2,"0",STR_PAD_LEFT); $Minute = str_pad(date("i"),2,"0",STR_PAD_LEFT); $T1 = microtime(true); # --------------------------------------------------------------- Lecture des TACHES require_once Niveau."exploitation/classes/tache.class.php"; # On en connait pas toutes les classes de Exploitation ? $UneTache = new Tache(); $UneTache->Jour = $Jour; # Jour de la semaine en anglais $UneTache->Heure = $Heure; # Heure précisée (si des zeros devant, pas de souci) $UneTache->Minute = $Minute; # Minute précisée list($Modules,$Procedures,$Parametres,$Dernieres,$Jours,$Heures,$Minutes,$Durees,$Resultats) = $UneTache->ListerTaches(); # ---------------------------------------------------------------- Recherche de la procédure à exécuter echo "Réveil ".$Passage." ".date("H:i:s").br; if (sizeof($Procedures) > 0) { if (sizeof($Procedures) > 1) { echo "Une seule tâche à la fois !! là, il y en a ".sizeof($Procedures).") ".date("Y-m-d H:i:s").br; } else { $Activation = true; $Module = $Modules[0]; $Procedure = $Procedures[0]; $Parametre = $Parametres[0]; # ------------------------------------------------------- Lecture de la TACHE identifiée $CetteTache = new Tache($Module,$Procedure,$Jour,$Heure,$Minute); if ($CetteTache->_Erreur <> "") { $Message = $CetteTache->_Erreur; } else { $Message = $CetteTache->Trouver(); if (!$CetteTache->_Existe) { echo "Si elle n'existe pas (plus), c'est bien pourri !".br; } else { # ----------------------------------------------- Une seule chose à faire à la fois !! ExecuterCommande($CetteTache,$Module,$Procedure,$Parametre,$Passage); } } if ($Message <> "") { echo $Message.br; $Message = ""; } } } # --------------------------------------------------------------- On s'endort pendant un certain temps (1mn normalement) sleep($Periode); $Passage++; }
    Ce batch donne satisfaction depuis plusieures années....
    Mais la trace montre, alors il n'y a rien de programmé, des endormissements de plus d'une HEURE... alors que le SLEEP est explicitement d'une MINUTE (variable $Periode).
    Quelqu'un a-t-il eu ce genre de problème ?
    Olivier

  2. #2
    Membre confirmé Avatar de a028762
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 419
    Points : 537
    Points
    537
    Par défaut Le code mis en forme
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    # ================================================================== Début de la procédure
    require_once "../../standards/classes/commande.class.php"; # Fonctions standard de contexte de commande 
    $UneCommande = new Commande();
    list($Module,$Message) = $UneCommande->DebuterCommande(); # début de commande 
    set_time_limit(0); # script de durée illimitée 
    ignore_user_abort(); # la tâche se poursuit après la fermeture du navigateur
    # =================================================================== Corps de la procédure 
    # ------------------------------------------------------------------- Boucle infinie 
    $Passage = 0; 
    $Periode = 60; # La précision des lancements de tâches est à la minute prés 
    while(1) { # --------------------------------------------------------------- Quelle heure ? (à la minute) 
        $Jour = $UneCommande->ConvertirJour(date("l")); 
        $Heure = str_pad(date("H"),2,"0",STR_PAD_LEFT); 
        $Minute = str_pad(date("i"),2,"0",STR_PAD_LEFT); 
        $T1 = microtime(true);
        # --------------------------------------------------------------- Lecture des TACHES 
        require_once Niveau."exploitation/classes/tache.class.php"; # On en connait pas toutes les classes de Exploitation ? 
        $UneTache = new Tache();
        $UneTache->Jour = $Jour; # Jour de la semaine en anglais 
        $UneTache->Heure = $Heure; # Heure précisée (si des zeros devant, pas de souci)
        $UneTache->Minute = $Minute; # Minute précisée 
       list($Modules,$Procedures,$Parametres,$Dernieres,$Jours,$Heures,$Minutes,$Durees,$Resultats) = $UneTache->ListerTaches(); # ---------------------------------------------------------------- Recherche de la procédure à exécuter 
    echo "Réveil ".$Passage." ".date("H:i:s").br; 
    if (sizeof($Procedures) > 0) {
    if (sizeof($Procedures) > 1) {
    echo "Une seule tâche à la fois !! là, il y en a ".sizeof($Procedures).") ".date("Y-m-d H:i:s").br; 
    } else { 
    $Activation = true; 
    $Module = $Modules[0]; 
    $Procedure = $Procedures[0]; 
    $Parametre = $Parametres[0]; # ------------------------------------------------------- Lecture de la TACHE identifiée 
    $CetteTache = new Tache($Module,$Procedure,$Jour,$Heure,$Minute); 
    if ($CetteTache->_Erreur <> "") {
    $Message = $CetteTache->_Erreur;
    } else {
    $Message = $CetteTache->Trouver();
    if (!$CetteTache->_Existe) {
    echo "Si elle n'existe pas (plus), c'est bien pourri !".br;
    } else {
    # ----------------------------------------------- Une seule chose à faire à la fois !!
    ExecuterCommande($CetteTache,$Module,$Procedure,$Parametre,$Passage); 
    }
    }
    if ($Message <> "") {
    echo $Message.br; 
    $Message = "";
    }
    }
    }
    # --------------------------------------------------------------- On s'endort pendant un certain temps (1mn normalement) 
    sleep($Periode); 
    $Passage++;
    }

Discussions similaires

  1. Qui perd son temps?
    Par Vespasien dans le forum SSII
    Réponses: 13
    Dernier message: 27/11/2008, 11h05
  2. [ASA6]Requetes qui prennent du temps a executer
    Par sboffin dans le forum Sybase
    Réponses: 5
    Dernier message: 16/10/2006, 13h20
  3. Réponses: 1
    Dernier message: 19/05/2006, 16h16
  4. Qui utilise le TEMP ?
    Par Débéa dans le forum Oracle
    Réponses: 3
    Dernier message: 19/01/2006, 13h14
  5. Fonction qui dure le temps de dialog ?
    Par CORREGE Frédéric dans le forum MFC
    Réponses: 6
    Dernier message: 21/02/2004, 16h39

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