Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compte à rebours PHP

    26 mars 2019 à 16:04:44

    Bonjour,

    j'ai commencé à créer un petit script en PHP pour faire un compte à rebours, le concept est qu'une boucle FOR avec un index positif se dés incrémente jusqu'à atteindre 0. L'utilisateur doit entrer une combinaison avant la fin du compte à rebours mais le fgets qui permet de saisir la combinaison stop la boucle. Auriez-vous une solution à ce problème ?

    Merci par avance.

    Voici mon code:

    <?php
    
    
    $chrono = 20; // En secondes
    
    compteARebours($chrono);
    
    function compteARebours($chrono)
    {
    for ($i = $chrono; $i != 0; $i--) {
    echo "\n$i\n";
    $code = desamorcer();
    if ($code == 1234) {
    echo "\nouf\n";
    break;
    } elseif ($i == 0) {
    echo "BOOOOOM";
    break;
    }
    sleep(1);
    }
    }
    
    function desamorcer()
    {
    $codeSaisie = trim(fgets(STDIN));
    
    return $codeSaisie;
    }



    -
    Edité par AKL 26 mars 2019 à 16:20:18

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2019 à 16:15:38

      Bonjour,

      Merci d'utiliser la balise code Image

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Image de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.

      • Partager sur Facebook
      • Partager sur Twitter

      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        26 mars 2019 à 16:22:14

        Merci, c'est modifié. Mais après m'avoir corrigé ce serai génial de faire également autant d'efforts pour apporter une réponse à ma question, je vous en remercie.

        -
        Edité par AKL 26 mars 2019 à 16:22:45

        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2019 à 16:35:09

          Salut !

          Je pense que ton fgets attend d'avoir une réponse avant de continuer, il faudrait plutôt séparer tes deux fonctions et de les lier par le biais d'un temp  :

          • d'un coté ton compte à rebours,
          • d'un autre coté ton fgets(),
          • Ajout d'un tmp.txt
          Tu aurais voulu le faire avec quelle interface ? un site ou une console ?
          • Partager sur Facebook
          • Partager sur Twitter

          L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D

            26 mars 2019 à 16:38:08

            Salut, merci pour ta réponse, je souhaite faire une console. Mais je n'ai pas compris ton raisonnement... Pourrais-tu m'expliquer un peu plus ? Merci
            • Partager sur Facebook
            • Partager sur Twitter
              26 mars 2019 à 17:15:14

              //Please remember in multi-process applications (which are best suited under CLI), that I/O operations often will //BLOCK signals from being processed.
              //
              //For instance, if you have a parent waiting on fread(STDIN), it won't handle SIGCHLD, even if you defined a //handler for it, until after the call to fread has returned. 
              //Your solution in this case is to wait on stream_select() to find out whether reading will block. Waiting on //stream_select(), critically, does NOT BLOCK signals from being processed. 

              Du coup, je viens trouver ça sur php.net

              Oublie ce que je t'ai dit plus haut, je me suis planté :D

              Essayes d'adapter ton code avec ça : https://www.php.net/manual/fr/function.stream-select.php.

              -
              Edité par DrGazi7 26 mars 2019 à 17:16:59

              • Partager sur Facebook
              • Partager sur Twitter

              L'erreur dans un code se situe très souvent entre le clavier et la chaise. =D

                26 mars 2019 à 17:19:16

                Merci beaucoup pour ta solution mais j'ai trouvé un autre moyen ! Serte il est moins pratique et peu dévoiler une erreur lorsque l'heure en seconde arrive à 60:

                <?php
                
                compteARebours();
                
                function compteARebours()
                {
                
                    $chrono = date('s');
                    $chronoFinal = $chrono + 10;
                    for ($i = 0; $i != $chronoFinal; $i++) {
                        $chrono = date('s');
                        echo $chrono;
                        $code = desamorcer();
                
                        if ($code == 1234) {
                            echo "\nOUF\n";
                            exit;
                        } elseif ($chrono >= $chronoFinal) {
                            echo "\nBOOOM\n";
                            exit;
                        }
                    }
                
                }
                
                function desamorcer()
                {
                    $code = trim(fgets(STDIN));
                
                    return $code;
                }
                
                




                • Partager sur Facebook
                • Partager sur Twitter

                Compte à rebours PHP

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown