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 :

[Système] Comment verrouiller l'exécution d'un script PHP ?


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Par défaut [Système] Comment verrouiller l'exécution d'un script PHP ?
    Bonjour,

    Je suis arrivé à faire fonctionner correctement mon prog PHP (v4) qui travaille entre 2 bases mysql myisam(lecture de l'une -> maj de l'autre + écriture de fichiers txt pour une interface de gestion)
    Il y a des traitements destructifs et il vaut mieux ne pas avoir à relancer l'engin.
    Le traitement dure une dizaine de minutes pendant lesquelles je dois attendre en évitant de faire autre chose pour ne pas risquer de fermer la fenêtre d'exécution avec un ESC par exemple => le prog s'arrête (je suis dans les choux !) et se relance (tout est faux) => reprendre la sauvegarde .

    Donc, je voudrais que mon programme s'exécute jusqu'au bout (sauf erreur).
    Pour lancer je donne simplement l'url dans IE.

    Il me manque un paramètre au lancement ? dans l'ini de PHP ??

    Merci

  2. #2
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    salut,
    je ne suis pas sûr d'avoir compris ce que tu veux, mais si c'est pour éviter que ton script s'exécute automatiquement dès que tu valides l'adresse, tu peux soit faire une demande de confirmation à l'exécution du script.
    Ou alors tu le sors du répertoire web (inaccessible depuis le web) et tu l'exécutes via une console.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Par défaut
    Salut,

    Non, c'est l'inverse :

    Je ne veux pas que le programme puisse être cassé par l'utilisateur tant qu'il n'a fini de faire son boulot (le programme ;

    par exemple, c'est ce qui arrive si je clique par mégarde sur la page du navigateur pendant l'exécution,
    ou si j'ai réduit cette fenêtre, quand je clique sur l'icône en bas de l'écran dans la barre dont je ne sais plus le nom.

    merci

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Par défaut
    Dans ce cas la, c'est mieux de faire le programme en un autre langage que PHP, et ensuite l'appeler par le script PHP. Mais c'est vrai qu'on n'a pas forcément accès à des serveurs dédiés.
    Sinon, il y a peut être la solution de lancer un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("php script.php &");
    pour essayer d'appeler le script en ligne de commande...
    Après, ce ne sont que des suppositions, mais ca se teste. Ca dépend aussi du type de serveur...

  5. #5
    Membre chevronné Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Par défaut
    Bonjour,
    Une des solution pourrait etre de faire sous-traiter ton traitement avec un autre script que tu lances dans un exec, par exemple. Comme ca si on ferme ton navigateur, ca n'empechera pas le script de continuer (quelque soit le timeout d'ailleurs).

    Ce script lancé peut generer un fichier, meme vide start quand il demarre, puis end quand il a fini.

    Ainsi ton script php detecte la presence ou non de ces fichiers :
    - si il n'y a rien : lancer le script de traitement
    - s'il y a start et pas end : traitement en cours, merci d'attendre
    - s'il y a start et end : traitement terminé (tu effaces ces fichier et tu relances le traitement ou tu fais autre chose...)

    Une idee comme une autre...

    Sohnic

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Par défaut
    Bonjour,

    Merci à Sékiltoyai et Sohnic

    J'ai mixé les 2 solutions pour arriver à ceci qui marche en test en local (reste à voir sur la prod avec les véritables programmes):

    1/ créer un nouveau type de fichiers = .phH qui est affecté à l'interpréteur php

    2/ nommer le prog de traitement proprement dit en .phh
    et ajouter au début la création du fichier start
    et à la fin la création du fichier end
    + les "echos" sont redirigés vers un fichier log

    3/ créer un prog de lancement phP cette fois qui teste d'abord la présence des fichiers start et end ==> si existent = le prog est déjà lancé -> quitter
    + lance le traitement vu en 2/ .phH
    //exec("php traitement.php &"); // n'a pas l'air de fonctionner en windows (par rapport à unix)
    exec("php traitement.phh"); // attention, c'est un .phH et pas phP
    + au retour, lit et affiche le contenu du fichier log
    + efface les fichiers start et end

    Ainsi le traitement se déroule dans une fenêtre dos et à priori faire un esc ou se balader dans le navigateur ne le casse pas comme lorsqu'on le lance depusi le navigateur (mais il faut qu'il se termine !).
    Les fichiers end et start empêchent de relancer pendant que traitement tourne déjà parce que traitement n'affiche plus rien

    si besoin, je peux fournir le source pour les tests

    je vais tester encore un peu et si ok implanter le système en prod

    merci beaucoup

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Par défaut
    j'ai pas trop suivi le principe, mais si ca marche, c'est le principal

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

Discussions similaires

  1. [EasyPHP] Comment programmer l'exécution d'un script php ?
    Par onlytime dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 29/03/2008, 19h56
  2. Comment exécuter automatiquement un script php toutes les 24h.
    Par legastu dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 12/06/2007, 15h25
  3. [Système] Exécution d'un script PHP distant
    Par SimOOn dans le forum Langage
    Réponses: 9
    Dernier message: 29/05/2007, 16h53
  4. [javascript] comment interrompre l'exécution d'un script?
    Par r0d dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 09/11/2006, 13h01
  5. [Système] Exécution d'un script PHP à heures fixes
    Par Kiyomizu dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2006, 09h30

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