Salut a tous !!

J'ai fais un script qui permet d’exécuter des actions après vérification d'un mot de passe enregistré dans un fichier, le problème est que l'action en question peut mettre plusieurs minute a s’exécuter, j'aimerai donc écrire un message qui demande a l'utilisateur de patienter, le temps du chargement de l'action, sauf que je ne vois absolument pas comment faire, car a partir du moment ou l'action est lancé, le script restera bloqué a cette ligne jusqu’à ce qu'elle ce termine.

Je vous montre une maquette du code afin que vous puissiez visualiser :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Rock</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body> 
	 
	<?php
		
		function EnvoieFormulaire ($mdp) {
			
			?>
			<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
			<p>
			<input type="password" name="<?php echo $mdp; ?>">
			<input type="submit" value="Valider">
			</form>
			</p>
			<?php
			}
			
			
			
		$monFichier = fopen('MotDePasse.txt', 'r') or die("Fichier manquant"); // 1 : on ouvre le fichier	
		$contenu=file_get_contents('MotDePasse.txt'); // Parcours le fichier et le stock dans contenu
		$nombrmots = str_word_count($contenu, 0);
		for ($i = 1; $i <= $nombrmots; $i++)
			{
			$mdp[$i] = fgets($monFichier); // 2 : on récupere le mot de passe
			$mdp[$i] = trim($mdp[$i]);
			}
		fclose($monFichier); // 3 : quand on a fini de l'utiliser, on ferme le fichier
				
		if (isset($_POST['choix']) AND $_POST['choix']=='Choix1')//Est ce que choix1 a été validés
			{
				echo "Veuillez entrer votre mot de passe";
				EnvoieFormulaire ('mot_de_passe_1');
			}
			
		if (!isset($_POST['choix']) AND isset($_POST['mot_de_passe_1']))
			{			
				$mdp_temp = $_POST['mot_de_passe_1'];
				$continue = 0;	
				for ($i = 1; $i <= $nombrmots; $i++)
					{
					if ($mdp_temp === $mdp[$i])
						{
							$continue = 1;
							$i = $nombrmots;
						}
						else 
							{	
							}
					}						
				if($continue === 1)
					{

					*Action qui peut durer jusqu'a 2 min avant de s'executer     complement, c'est ici que j'aimerai instauré mon message d'attente*
					
					}
				elseif($continue === 0)
					{
						echo "Veuillez retaper votre mot de passe";
						EnvoieFormulaire ('mot_de_passe_1');
					}
			}	    ?>
     
         
    </body>
</html>


Cette page est appellée par un simple formulaire a plusieure choix
Bonjour,

Cette technique n'est pas la meilleur solution pour rechercher un mot de passe.
A partir d'un certain nombre de mot de passe dans ton fichier txt, ton script va planter.

Je te conseille d'utiliser une base de donnée MySQL, technologie davantage orienté vers le stockage de données.
Le mot de passe n'est pas le problème sachant que dans le cas présent je ne devais pas passer par une base de donné.

J'aimerai juste des indications ou des idées qui me permettrai d'avancer sur la mise en place d'une page d'attente le temps que mon action ce termine.

Merci
Je serais passer par l'AJAX (avec jQuery) perso.

Une simple page avec comme code :

<html>
<head>
	<title></title>
</head>
<body>	
	<div id="loading_div" style="display:none; width: 500px; margin:auto; margin-top: 50px; text-align: center">Veuiller patientez pendant l'execution du script <br /><br /><img src="ajax-loader.gif" /></div>

<script type="text/javascript" src="jquery-1.8.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$.ajax({
        url: 'sleep.php',
        type: "POST",
        beforeSend: function(){
         $("#loading_div").show();
       },
        success: function(retour){
            $('#loading_div').html(retour);
         }
    });
});
</script>
</body>
</html>


Tu changes l'url de la page appelé 'sleep.php' par ton script et une fois son exécution terminée, le message de chargement se changera par l'affichage que te renvoi ton script.

Exemple de page dans mon sleep.php :

<?php 

sleep(5);
echo "C'est fini, tout est fini..."; ?>


Voici une demo pour t'illustrer (attend 5 seconds sur la page)
J'ai essayé ton code , mais j'arrive a le faire marcher seulement en mettant mon sleep(5); dans une nouvelle page et en appelant la page quand il arrive dans ma boucle de condition, et vue que je n'ai que des connaissances très faible en Ajax je n'ai pas pu trop essayer d'adapter ton code.

sachant que j'ai fais ça
				if($continue === 1){
			        ?>
                               <META HTTP-EQUIV="Refresh" CONTENT="0;URL= testIndex.php"
                                <?php
				echo "Vous avez tapé le bon mot de passe";
					}
				
					
				elseif($continue === 0)
					{
						echo "Veuillez retaper votre mot de passe";
						EnvoieFormulaire ('mot_de_passe_1');
					}
			}	
    
					?>


Et comme je l'ai dit precedemment, je n'ai aucune connaissance en Ajax donc je savais pas trop comment l'adapter.

Est ce qu'il y aurait un moyen d'eviter d'avoir a appeler une nouvelle page ?

Merci d'avance
Modifié par Heps (18 Jul 2013 - 11:14)
J'ai mi un sleep(5); pour simuler l'execution d'un script de 5 secondes.
A la place de tout ça, tu peux y mettre tout ton script actuel qui te prend 40 secondes.

Si ce script fait un affichage, tu peux faire en sorte que tout cet affichage viennent se mettre dans une div de ta page. Un peu de Google pour des explications concernant l'AJAX jQuery et tu comprendras vite Smiley cligne

Si jamais la solution ne convient pas, je laisse quelqu'un d'autre t'en donner une, c'est la seule qui me vient à l'esprit sachant que la page restera blanche jusqu'au moment où ton script est terminé...
Quand je met directement mon code ça ne marche pas, le gif ne s'affiche pas.

Merci quand même pour ton aide je vais me debrouiller avec ce que tu m'as donné