Se connecter / S'enregistrer
Votre question

Pourquoi php n'execute pas les commande dans l'ordre ...

Tags :
  • Script
  • Programmation
Dernière réponse : dans Programmation
22 Septembre 2006 19:16:09

Salut à tous, bon voila j'ai un problème que je n'arrive pas vraiment à comprendre.
Le bute de mon petit bout de script est d'afficher tout d'abord, : "patientez 15 seconde" puis justement d'attendre 15 secondes avant d'executer la suite des oppérations.

Voici mon script pour l'instant :
  1. <?php
  2. echo "Patientez 15 secondes";
  3. $s = date("s");
  4.  
  5. if ($s > 45) {
  6. $end = ($s + 15) - 60;
  7. $temp = "supp";
  8. }
  9.  
  10. else {
  11. $end = $s + 15;
  12. }
  13.  
  14.  
  15. if ($temp == "supp"){
  16. while ($end < $s) {
  17. $s = date("s");
  18. }
  19. }
  20.  
  21.  
  22. else {
  23. while ($end > $s) {
  24. $s = date("s");
  25. }
  26. }
  27. echo "C'est bon 15 secondes sont passé";
  28.  
  29.  
  30. ?>


Le problème est que la page n'affiche pas "Patientez 15 secondes" avant que ces 15 secondes soit passé et sa m'affiche d'un coup :

"Patientez 15seconde.C'est bon 15 secondes sont passé"

Alors que je place bien l'affiche de la phrase "Patientez 15 secondes" avant l'execution du code pour attendre 15 secondes et donc la je vois pas trop quoi et comment faire ...... Si quelqu'un pouvait m'aider ....

Merci

Autres pages sur : php execute commande ordre

a c 145 L Programmation
22 Septembre 2006 19:27:33

la commande sleep() et la commande flush() sont tes amies.
Le php traite tout et une fois son exécution achevée, il envoit sur la sortie standard (le flux html).
La fonction flush() permet de forcer l'envoit de tes données.
Quant à sleep, elle force une pause dans le traitement.

Exemple de base:
  1. <?
  2. echo 'Il est exactement: '.date("H:i:s");
  3. flush();
  4. sleep(15);
  5. echo 'Il est maintenant: '.date("H:i:s");
  6. ?>
22 Septembre 2006 20:08:28

Bon alors pour le "sleep" ok j'ai saisis le truc enfaite sa m'épargne quand meme une 20aine de lignes donc merci beaucoup :) 
Par contre pour le "fluch" la j'y arrive pas j'ai du manquer un truc est ce que tu peux le mettre en pratique ..... stp

Enfaite c'est pas que j'y arrive pas mais que sa ne marche pas, après quelques recherche sur la fonction apparement, certain serveur et meme navigateur ne ferais pas attention à cette fonction qui vide "buffer de sortie" alors que eux l'utilise.

Donc si tu vois une autre solution je suis preneur .... :) 
Merci
Contenus similaires
22 Septembre 2006 20:22:40

Si je ne me plante pas, le PHP s'éxécute sur le serveur....qui envoi les pages générées après éxecution totale des codes PHP....En gros, sans le flush, il te serait impossible d'envoyer une page affichable a ton client avant que le script PHP ai fini son éxécution (donc avant que tes 15 sec soient passées)...

Dans le code ci dessu, la fonction flush va forcer le serveur a envoyer ce qu'il a traité de ta page (c'est à dire la ligne écho se trouvant juste au dessu) avant de continuer tranquilement (et d'attendre 15 secondes avant de réenvoyer de nouvelles données)...

Après ne connaissant pas ces commandes, je peux me planter...Mais c'est ce que j'ai compris de la réponse de crazycat

Edit: Ton edit a été plus rapide que ma réponse ^^...Dsl...
22 Septembre 2006 20:23:52

Oui Oui enfaite c'est sa, mais tu n'as pas du voir que j'ai reédité mon post, dsl.
22 Septembre 2006 20:29:06

Et re plus rapide...MDR...
Alors peut etre des infos interressante...Mais pas forcément solvable malheureusement...
Je te fais un CC:
Citation :
De nombreux serveurs, essentiellement sous Windows, continueront à bufferiser l'affichage de votre script jusqu'à ce qu'il soit terminé, avant de transmettre les résultats à l'internaute.

Des modules Apache comme mod_gzip utilisent leur propre bufferisation, ce qui fait que flush n'enverra pas les données jusqu'au navigateur client immédiatement.

Même le navigateur peut réaliser une bufferisation avant de l'afficher. Netscape, par exemple, met en cache le texte jusqu'à ce qu'il recoive une fin de ligne, ou une nouvelle et il ne va effectuer aucun affichage tant que les balises </table> ne seront pas toutes refermées.

Certaines versions de Microsoft Internet Explorer ne commençeront l'affichage de la page qu'après avoir reçu 256 octets d'affichage. Cela vous obligera à envoyer des espaces supplémentaires pour afficher la page.


Dans les deux premiers cas, il doit y avoir solution...Mais dans les deux derniers, là ça sera plus difficile a corriger puisque ça ne tient plus du serveur :s
22 Septembre 2006 20:30:08

lol ouép je tiens mes sources du meme petit bout de texte ^^
22 Septembre 2006 20:36:44

LooL...Faut toujours que je sois à la ramasse sur ce forum ^^
23 Septembre 2006 01:28:50

Autre solution (tout dépend du résultat esthétiqu que tu souhaite obtenir)

Tu fais une premiere page avec un META REFRESH de 15 seconde et où tu marques "patientez 15 sec)" et qui redirigera sur la page php que tu execute normalement
a c 145 L Programmation
23 Septembre 2006 12:22:32

si le flush() ne marche pas, on peut essayer:
en début de page: ob_start();
à la place du flush: ob_flush();
23 Septembre 2006 13:39:55

Salut tout le monde enfaite finalement j'ai opté pour une solution un peu du genre celle proposée par "okinou"

Donc j'affiche le texte patientez 15 seconde puis un petit javascript se charge de rediriger le visiteur sur la meme page mais avec un paramètre en plus. Puis avec un peu de php je récupère la variable et je voi si c'est bon ou pas ...

J'ai pas le code sous la main mais si quelqu'un aimerais voir ce que sa donne demandez le moi je le posterais ;) 
23 Septembre 2006 18:09:52

n'utilise pas javascript pour la redirection car si le client ne l'a pas activé, cela ne marchera pas, le mieux est le META REFRESH comme je te l'ai indiqué.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS