Tom's Guide > Forum > Programmation > Pourquoi php n'execute pas les commande dans l'ordre ...

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

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

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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 :

Code :
  1. <?php
  2. echo "Patientez 15 secondes";
  3. $s = date("s" );
  4. if ($s > 45) {
  5. $end = ($s + 15) - 60;
  6. $temp = "supp";
  7. }
  8. else {
  9. $end = $s + 15;
  10. }
  11. if ($temp == "supp" ){
  12. while ($end < $s) {
  13. $s = date("s" );
  14. }
  15. }
  16. else {
  17. while ($end > $s) {
  18. $s = date("s" );
  19. }
  20. }
  21. echo "C'est bon 15 secondes sont passé";
  22. ?>



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


Message édité par Prog le 22-09-2006 à 19:19:09
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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:

Code :
  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. ?>

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

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


Message édité par Prog le 22-09-2006 à 20:21:00
Répondre à Prog

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...


Message édité par Nisnor le 22-09-2006 à 20:23:55
Répondre à Nisnor

Oui Oui enfaite c'est sa, mais tu n'as pas du voir que j'ai reédité mon post, dsl.

Répondre à Prog

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

Répondre à Nisnor

lol ouép je tiens mes sources du meme petit bout de texte ^^

Répondre à Prog

LooL...Faut toujours que je sois à la ramasse sur ce forum ^^

Répondre à Nisnor

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

Répondre à okinou

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

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

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 ;)


Message édité par Prog le 23-09-2006 à 13:41:09
Répondre à Prog

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é.

Répondre à okinou
Tom's Guide > Forum > Programmation > Pourquoi php n'execute pas les commande dans l'ordre ...
Aller à :

Il y a 1414 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens