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] Traiter plusieurs script envoyé par le même client


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Tableaux] Traiter plusieurs script envoyé par le même client
    Je suis en PHP 5 avec SQL Server. J'ai réalisé une fonctionalité qui fait un traitement sur des fichiers. Je souhaite pouvoir stopper ce traitement à tout moment. Pour celà durant le déroulement du traitement, à chaque étape il vérifie qu'il n'y a pas de demande d'annulation.

    Mon problème c'est que pour un client donné le serveur exécute script après script.

    Déroulement attendu:

    -> Exécution du traitement
    -> Client lance l'annulation
    -> Exécution du script d'annulation
    -> Fin de l'exécution du traitement due à l'annulation


    En fait l'exécution de mon programme se déroule comme ci dessous:

    -> Exécution du traitement
    -> Client lance l'annulation
    ...traitement WIP
    ->Fin de l'exécution du traitement
    ->Exécution du script d'annulation

    Donc le traitement n'a pas était annulé....

    J'ai réussi à le faire fonctionner avec deux machine différentes c'est à dire si c'est une machine qui lance le traitement et l'autre l'annulation...


    Il doit y avoir un paramètre dans le php.ini disponible pour régler ce problème mais j'ignore comment faire. Si quelqu'un peu m'aider celà me rendrais un grand service.

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Salut,

    Je ne sais pas ce qu'est un traitement WIP, après une vague recherche j'ai découvert que ça avait un rapport avec du graphisme, mais je me trompe peut-être.. Donc je ne comprend pas bien ton problème lié à l'annulation..

    Cependant, je pense que cet article expliquant une technique de multithreading en PHP, pourrait te venir en aide. PHP5 n'offre pas de mecanisme de Threads, mais c'est une solution permettant d'executer plusieurs tâches simultanément quand même, avec une astuce.

    C'est un des désavantage de PHP par rapport à Java par exemple; En Java, tu peux manipuler des vrais Threads, et du coup tu peux envoyer des signaux pour annuler un traitement si le besoin s'en ressent.

    Je ne sais pas si ceci t'aide, mais peut-être que si tu donnais une description plus complète de ton traitement WIP et comment il est généré, je pourrais t'aider d'avantage.

    Il y a une autre notion interessante quand on parle de mécanismes d'annulation, dans les SGBD, notamment avec les transactions.

    Une transaction est un moyen du SGBD de faire des taches les unes à la suite des autres, puis de "valider" ( commit ) tous les traitements d'un coup si tout s'est bien passé et que toutes les étapes ont étés passées avec succès. Le mécanisme associé au commit permettant l'annulation est un rollback. Jète un oeil sur ces éléments, ça peut aussi t'aider à faire un mecanisme d'annulation, avec par exemple une table qui contiendrait ta tache en cours d'execution, puis un flag "annulation" que tu mettrais à true, et qui déclencherait un rollback en plein milieu de traitement.

    A+

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    et bienvenue à toi sur les forums de developpez.com !

    -> Exécution du script d'annulation
    Qu'entends-tu par là ? As-tu du code à nous montrer ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Eclaircissement du problème
    Oui je pourrais vous monter du code mais je pense que celà n'a pas beuaoup d'interêt:

    De plus ce n'est pas un problème de code étant donné que celà fonctionne si je suis sur deux ordinateurs différents (cf premier message posté)


    Pour vous eclaircir sur mon problème :

    script du traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    while ( file = il reste des fichier à traiter() ) { 
     
    Effetue traitement (file);
     
    if (file_exists("cancel")) {
    	$canceled = true;
    	break;
    // Fin du script
     }
    }
    script d'annulation du traitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $descFile = fopen("cancel", "w");
    fclose($descFile);

    Voilà les pseudos algos de mes deux scripts. Donc mon problème et que tant que le premier script n'est pas terminé mon serveur n'exécuteras pas le second. A moins qu'il proviennent d'un autre client/ordinateur. J'espère que j'ai éclaircis le problème enfin que vous puissiez m'aider Merci pour vos réponses.

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je viens d'essayer avec le code suivant et je n'ai aucun problème :
    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
    <?php 
     
    $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'default';
    switch($action) {
        case 'start':
            @unlink("stop");
            $i = 0;
            while(!file_exists("stop") && $i++ < 10) { sleep(2); }
            echo "Stopped at $i.";
            break;
        case 'stop':
            $f = fopen("stop", 'w');
            fclose($f);
            echo "Stopping...";
            break;
        default:
            ?>
    <html>
        <head>
            <script type="text/javascript" src="http://script.aculo.us/prototype.js"></script>
            <script type="text/javascript">
            Event.observe(window, 'load', function () {
                    Event.observe($('start'), 'click', function () {
                            new Ajax.Updater('result_start', '?action=start');
                    });
                    Event.observe($('stop'), 'click', function () {
                            new Ajax.Updater('result_stop', '?action=stop');
                    });
            }, true);
            </script>
        </head>
        <body>
            <div id="result_stop"></div>
            <div id="result_start"></div>
            <button id="start">start</button><button id="stop">stop</button>
        </body>
    </html>
    <?php
        break;
    }
     
    ?>
    Je clique sur [start],
    j'attends 5 secondes,
    je clique sur [stop],
    "stopping..." apparait,
    puis immédiatement (ou presque) après, le traitement est terminé.


    EDIT: Arf, meme pas besoin d'ajax, deux fenetres l'une avec le script ?action=start l'autre avec ?action=stop, on lance le premier, ca tourne ca tourne, tant qu'on ne lance pas le deuxieme script.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Problème de session
    En fait je me doutais que ça pouvais marcher sur un autre poste, mais je pense que je dois forcer un paramètrage dans php.ini. En fait ça marche dans le cas où j'ouvre deux sessions différentes...

    Mais j'ai besoins que ça marche sur tout les postes... Et j'ai recopié (mis les même paramètres) le php.ini de l'autre poste, le problème persiste

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Le mystère deumeure
    En fait ton exemple marche très bien chez moi. Donc mon problème est ailleurs. Merci beaucoup, pour ton aide.

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

Discussions similaires

  1. [PHP 5.4] putenv() affecte plusieurs scripts qui tournent en même temps
    Par Bioteck dans le forum Langage
    Réponses: 6
    Dernier message: 08/02/2015, 22h33
  2. Intégrer des bouts de scripts envoyés par les visiteurs
    Par thelvin dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/06/2013, 11h44
  3. $.ajax, plusieurs valeurs envoyés par la valeur post
    Par lemirandais dans le forum jQuery
    Réponses: 5
    Dernier message: 31/12/2008, 11h34
  4. tableau a plusieurs dimensions envoyé par xhr.send
    Par kapfab dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/03/2007, 16h24
  5. interaction entre plusieur script python par le biai d'internet
    Par yggdrazil dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 01/11/2006, 14h36

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