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] Interrompre proprement un script infini


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 36
    Points
    36
    Par défaut [Tableaux] Interrompre proprement un script infini
    Bonjour à tous,

    Je dois écrire un script php qui traitera une queue de "transactions bancaires" qui se déroulent comme suit :

    1/ L'utilisateur effectue un virement d'un compte vers un autre
    2/ Un check est effectué sur plusieurs paramètres
    3/ Si les checks sont ok alors on place les virements à effectuer dans une queue (une table mysql)
    4/ Un script infini traite par lots les transactions qui sont dans la queue et effectue des changements dans la DB

    Le script php infini sera lancé en shell sur le serveur web.
    Genre : [machine]$queueHandler start

    Le queueHandler sera un objet instancié une seule fois et qui traitera la queue.

    Pseudo-code :

    $work = true;
    while($work) {
    ....
    }

    Seulement, lorsque le script sera interrompu de manière intentionnelle, je ne veux pas qu'il soit coupé avec un kill -9 PID ...

    Avez vous une solution propre pour par exemple mettre $work = false ?
    J'ai pensé à mettre un flag quelque part dans la DB et changer ce flag si je veux l'arreter => une requete a effectuer sur ce flag à chaque passage dans la boucle while ... mais ca fait une requete en plus (même si elle ne sera pas lourde)

    D'avance merci

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Ton histoire de requete me semble etre la méthode la plus propre (ca peut aussi etre un fichier placé dans un dossier si tu ne veux pas charger ta bdd)
    et tu n'es pas obligé de le faire a chaque tour de boucle, je ne sais pas combien de temps prend un tour de boucle? Si ca ne prend que quelques secondes tu peux te faire un compteur qui va se charger de faire une vérification a intervalles réguliers de la présence de ce flag (fichier ou bdd)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2005
    Messages : 20
    Points : 29
    Points
    29
    Par défaut
    je ne comprend pas,

    dans ta fonction de vérification, tu peux générer des donnée dans une table

    ensuite dans le traitement un fois par jour,

    tu fait ta requete en supriment chaque ligne traité. comme cela tu ne risque pas d'avoir trop de pb même si ton script ce plante et qu'il soit relancer

Discussions similaires

  1. Terminer proprement une boucle infinie
    Par pynoob dans le forum Général Python
    Réponses: 11
    Dernier message: 10/02/2011, 19h23
  2. Interrompre proprement certains threads
    Par syntaxerror dans le forum Général Java
    Réponses: 3
    Dernier message: 24/10/2010, 10h54
  3. [Tableaux] Interrompre un foreach() ou substitution
    Par gloubi dans le forum Langage
    Réponses: 19
    Dernier message: 06/01/2007, 02h30
  4. [Tableaux] aide pour un script
    Par jim1 dans le forum Langage
    Réponses: 3
    Dernier message: 22/01/2006, 20h48

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