Stopper une boucle while

Eléphanteau du PHP | 16 Messages

30 juin 2016, 10:54

J'ai une boucle while qui s'execute dans une méthode POST. Je voudrais que lors du clic sur un bouton cette boucle while s'arrête. Je suis débutant en programmation web néanmoins je sais que je ne peux pas le faire uniquement en PHP.
De plus, j'ai réussi en AJAX à afficher en temps réel la progression de cette boucle while donc je me demandais si l'AJAX ne pouvais pas résoudre aussi ce problème ?

En esperant avoir été suffisament clair.
Merci d'avance

Mammouth du PHP | 1967 Messages

30 juin 2016, 11:16

Il te faudra un élément extérieur à ta boucle à vérifier à chaque itération comme une valeur en BDD ou une variable de SESSION (à vérifier)

Tu peux nous en dire plus sur ta boucle, car il y aura surement une bonne latence entre le clique et l'arret de la boucle.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

30 juin 2016, 11:51

Merci pour ton aide. Je précise, je n'ai pas de base de donnée.
Voici mon code php qui permet l'upoad via ftp :
$size_ftp = sprintf("%u",ftp_size($ftp, $directory_include.'/'.$file)); //je récupère la taille du fichier 
$ret = ftp_nb_get($ftp,$local, $directory_include.'/'.$file, FTP_BINARY);  
$size_local = filesize($local);
while ($ret == FTP_MOREDATA && $stop == 0){
       clearstatcache();
       $size_local =filesize('$local');                                
       $size_percent = ($size_local / $size_ftp) * 100;
       echo "\n"."<script language=\"Javascript\">getPercent(".$size_percent.",'progBar');</script>";		
       ob_flush();
       flush();
       $ret = ftp_nb_continue($ftp);
}
if ($ret != FTP_FINISHED) {
    echo "There was an error downloading the file...";
}
Et voici le code permettant l'affichage du pourcentage du fichier qui a été upload :
<script language="Javascript">
function getPercent(myNewPercent, myDiv) {
  d=document.getElementById(myDiv);
  d.innerHTML = myNewPercent+"%";
  d.style.width = myNewPercent+"%";
  return true;
 }
</script>
<div id="prog" style="width:"400px">
       <div id="progBar" style="width:0%; backgroundColor:#AAAAAA">0%
       </div>
</div>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juin 2016, 12:26

salut,

il te faut modifier un peu la chose pour intégrer dans ton while un test sur une variable de session (genre la première chose faite dans la boucle)
par exemple
<?php
while( ...){
    if(!empty($_SESSION['stopBoucle'])) {
        break;
    }
    // le code existant
}
Coté affichage de la barre il y a surement mieux que ce que tu fais. Par exemple en mettant l'info en session et en utilisant un script JS qui va chercher régulièrement l'information (ou en utilisant les websocket pour pousser l'info du serveur au client).


Juste en passant, pour faire bien c'est <script type="texte/javascript"> </script> ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 16 Messages

30 juin 2016, 13:20

salut,

il te faut modifier un peu la chose pour intégrer dans ton while un test sur une variable de session (genre la première chose faite dans la boucle)
par exemple
<?php
while( ...){
    if(!empty($_SESSION['stopBoucle'])) {
        break;
    }
    // le code existant
}
Comment faire pour modifier la variable de session lors de l'appui sur le bouton ?
Coté affichage de la barre il y a surement mieux que ce que tu fais. Par exemple en mettant l'info en session et en utilisant un script JS qui va chercher régulièrement l'information (ou en utilisant les websocket pour pousser l'info du serveur au client).
Je suis vraiment un débutant en programmation web. Donc, merci pour ces pistes je vais essayé d'améliorer cela.
Juste en passant, pour faire bien c'est <script type="texte/javascript"> </script> ;)
Modifié :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 juin 2016, 13:37

Comment faire pour modifier la variable de session lors de l'appui sur le bouton ?
=> Requête serveur avec JS (le truc que tout le monde ou presque appel ajax, comme pour récurer ;) ) vers un script php qui va set la variable de session.
Le bouton à un événement onClick il faut l'utiliser (en JS) pour faire la requête serveur.

Comme déjà dit par @arthur il va y avoir une latence entre la demande et l'arrêt : temps d'acheminement de la requête (latence réseau etc.) et d’exécution de la requête par le serveur(limite insignifiant par rapport au premier). Ces paramètres ne sont pas maîtrisable.

Il ne faut pas oublié que lorsque tu stop il faut faire quelque chose de ton bout de fichier envoyé (suppression ?).
et il faut supprimer la variable de session "stop" pour que tu puisse a nouveau utiliser le script.

Je n'oublie pas la libération des ressources, mais je suppose que c'est déjà fait ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 16 Messages

30 juin 2016, 16:11

Comment faire pour modifier la variable de session lors de l'appui sur le bouton ?
=> Requête serveur avec JS (le truc que tout le monde ou presque appel ajax, comme pour récurer ;) ) vers un script php qui va set la variable de session.
Le bouton à un événement onClick il faut l'utiliser (en JS) pour faire la requête serveur.
D'accord merci pour ton aide, je vais essayer cela.
Comme déjà dit par @arthur il va y avoir une latence entre la demande et l'arrêt : temps d'acheminement de la requête (latence réseau etc.) et d’exécution de la requête par le serveur(limite insignifiant par rapport au premier). Ces paramètres ne sont pas maîtrisable.
Malheureusement, l'utilisateur devra faire avec.
Il ne faut pas oublié que lorsque tu stop il faut faire quelque chose de ton bout de fichier envoyé (suppression ?).
et il faut supprimer la variable de session "stop" pour que tu puisse a nouveau utiliser le script.
Le but est que l'utilisateur puisse controler l'upolad. Donc, il pourra reprendre le téléchargement la ou il en été.