[RESOLU] Envoyer la sortie echo à l'internaute pendant le chargement

Eléphanteau du PHP | 41 Messages

20 nov. 2012, 12:38

Bonjour,

J'ai une page dans le chargement est long. Je voudrais mettre un message à l'internaute du style "le chargement est en cours, vous en êtes à l'étape X". Le soucis c'est que si je fais

Code : Tout sélectionner

echo "Chargement"; fonctionLente();
Chargement ne s'affiche pas. Je n'ai qu'une page blanche qui se charge et après tout s'affiche d'un coup. Comment puis-je dire à PHP d'envoyer d'abord ce bout de page puis le reste ensuite ?

Merci

Avatar du membre
Mammouth du PHP | 1609 Messages

20 nov. 2012, 13:12

Théoriquement il faudrait forcer l'envoi du buffer de sorti au navigateur.
On utilise pour ça la fonction flush (qui vide le buffer au passage). Mais dans la pratique c'est pas toujours très efficace.

Sinon tu peux faire une page qui affiche "Chargement" et fait un appel ajax pour exécuter ta fonction lente.
Développeur web depuis + de 20 ans

ViPHP
xTG
ViPHP | 7331 Messages

20 nov. 2012, 14:34

Je complète les propos de Saian.

Certains navigateurs attendent la totalité de la réponse à la requête HTTP avant de parser quoi que ce soit (et donc d'afficher).
Donc même avec un forçage de l'envoi du buffer on a pas toujours l'effet souhaité à cause du client.

L'Ajax reste donc LA solution.
Bien qu'on rencontre toujours un problème d'ordre client, à savoir si le JS est activé ou non.