@Steal35
Ce que tu me donnes fait à peu près la même chose que ce que je fais avec ma fonction chrono (quand je met son contenu directement sur la page et pas dans une fonction), à savoir afficher une suite de chiffre de 1 à 10.
Moi ce que je voudrais c'est un affichage "chronomètre", cad afficher 10, puis 9, 8, etc... en remplaçant le nombre à chaque fois, comme dans un chrono, et à rebours en commençant à 10.
A noter qu'il faudra que tu m'explique un peu l'utilité de flush et autre, j'ai regardé la doc pour comprendre, mais sans succés
Utilité de
flush() (en gros) :
Classiquement :
- Le client (navigateur) envoie une requête au serveur.
- Le serveur traite toute la demande (il exécute tout le script PHP, par exemple).
- Le serveur envoie le résultat.
Le client récupère donc une page "finie".
L'utilisation des flush permet :
- Le client (navigateur) envoie une requête au serveur.
- Le serveur traite
une partie de la demande (via PHP, par exemple).
- Le serveur envoie
un début de résultat via flush.
Le client récupère donc une page "pas finie", qui se complétera à mesure des flush ou à la fin du script.
Tu peux tester avec la fonction de Stealth35 et ton script.
Avec ton script, le serveur effectue toutes les opérations puis envoie la page.
=> Il boucle de 10 à 0, et affiche d'un coup 10 9 8 7 6 5 4 3 2 1 0 (à la fin de la boucle).
Avec le script de Stealth35, il boucle de 10 à 0 et affiche dans la boucle. Tu verras donc 10 puis (à la suite) 9 etc.
@macgawel
Je ne connais pas bien javascript mais je suppose qu'en faisant comme tu dis, on obtient un code où, le but étant d'incrémenter de 1 une variable à chaque fin de compte à rebours, c'est la page qui calcule elle même le compte puis qui envoie un signal au serveur lui demandant de faire l'incrémentation. En gros les calculs se font du coté client et le serveur ce la joue bête et discipliné.
Hors si on applique ça à des programme comme, par exemple, les jeux sur navigateur (genre là où tu clique sur "construire entrepôt", ça gobe 200 bois, puis deux heures après t'as un entrepôt tout neuf) ou encore les sites comme rapidshare où tu dois attendre 30 sec avant de télécharger, c'est la porte ouverte à toute les tricheries., c'est la porte ouverte à toute les tricheries.
Ce que je voudrais faire c'est un système où le serveur travaille de son coté, tout en faisant en sorte que le client puisse voir le décompte.
Si j'ai pas été clair où si vous avez d'autres questions, n'hésitez pas

Le plus simple à mon avis c'est de coupler JS + php (éventuellement avec de l'AJAX).
1. Le client valide (en cliquant sur le bouton).
2. Le serveur exécute le script et renvoie une page d'attente.
3. Sur cette page, côté client, un JS effectue le compte à rebours.
4. Comme le JS s'exécute côté client, il faut "bloquer" côté serveur. Plutôt que de faire un script qui va tourner pendant 10 sec. (même avec des sleep), il vaut mieux mémoriser l'heure de la dernière demande.
Les parties 1 à 3 sont simples.
Pour la 4, c'est (un peu) plus délicat. Il y a plusieurs possibilités, qui reposent toutes sur le même principe :
On stocke la date de la dernière demande, et quand on reçoit la prochaine demande on compare les dates.
Par exemple, tu peux utiliser les sessions : tu stockes une variable
$_SESSION['date_derniere_construction']
$_SESSION['date_construction'] = time(); // date à laquelle le serveur reçoit la demande
if ( $_SESSION['date_derniere_construction'] - $_SESSION['date_construction'] < 10 ) {
// Pas assez de délai => on bloque
}
else {
// Le délai est respecté => on fait le traitement
}
$_SESSION['date_derniere_construction'] = $_SESSION['date_construction'];
Il est aussi envisageable d'utiliser un champ caché qui contient la date de la dernière demande (ou mieux une valeur dépendant de la date).
Pour des jeux (où il y a plusieurs actions qui demandent du temps, et parfois un temps trop long pour être géré avec les sessions), tu peux stocker la date de la demande dans la BDD, et à chaque demande du client faire la comparaison.