Page 1 sur 1

livraison de la page avant fin de moulinage script

Posté : 04 sept. 2008, 11:42
par Uld
Bonjour,

je suis confronté à un problème pas commode, je vais tenter de l'expliquer...

Admettons un script foo.php qui délivre une page web html. Ce script fais appel à un base MySQL pour récuperer diverses info, prépare la page et apache sert ensuite la page à l'internaute.

Mon soucis c'est qu'une fois que le script à fait les calculs nécessaire pour délivrer une page personnalisé à l'internaute, il termine en faisant divers autres calculs (assez longs) mais qui ne sont pas utiles pour la page en elle même (grosso modo il fait diverses modifications dans la base, ajouts de statistique, et autres calculs).

Tous ces calculs secondaires ne sont pas nécessaire pour délivrer la page, et son fait en tout fin de script, après la balise </html>

Mon soucis c'est qu'il semblerait que la page ne soit pas envoyée au navigateur tant que l'execution complète du script n'est pas finie... Et donc l'internaute poireaute pendant un temps trop long.


Est il possible d'avoir le comportement suivant:

1 -Appel de la page foo.php
2 -Calcul de la page personnalisée par PHP
3 -Livraison de la page
4 -Autres calculs divers
5 -Fin d'appel au script foo.php

L'idéal serait que l'étape 3 permette à l'utilisateur de visualiser la page demandée sans que le moulinage de l'étape 4 ne l'impacte.


Merci par avance pour les pistes que vous pourrez m'indiquer.

Uld

Posté : 04 sept. 2008, 11:48
par savageman
Essaie en faisant ob_flush() après ton </html> (ou ob_end_flush() ).

Posté : 04 sept. 2008, 11:51
par Berzemus
Il suffit de jouer avec le tampon d'affichage: voir ob_Start()

Sinon est-ce que tu ne peux pas provoquer ces calculs dans un script séparé, avec un cron, par exemple ? (le pendant des tâches planifiées de windows, mais pour *nix)

Ou bien tu pourrais chercher d'ou viennent ces délais de calcul, parce qu'a moins de vouloir recalculer pi avec une précision de quelques milliers de chiffres après la virgule, je ne vois pas ce qui pourrais te prendre tellement de temps pour que le visiteur parte se trouver un café..

Posté : 04 sept. 2008, 12:32
par Invité
Ok j'vais me pencher sur ces histoire de buffer d'affichage.

Non j'ai pas franchement envie d'utiliser un cron. C'est un script du jeu que je développe (arkhan) et qui fait jouer l'IA. Le but c'est que ce soit justement les actions des joueurs qui fassent jouer l'IA, histoire que si un jour le jeu plante pour une raison lambda (surcharge, plantage, autres) l'IA ne continue pas à jouer toute seule.

Et non je ne recalcul pas PI, je fais juste jouer quelques centaines de monstres (donc appel de classe, requêtes dans la base etc)

Merci pour la piste.

Posté : 04 sept. 2008, 13:34
par akrogames
Et si à la fin de ta page tu envoie une requête AJAX vers une autre page PHP qui ferait les calculs.

Cela semblerait être le mieux.

Posté : 04 sept. 2008, 14:05
par doctorrock
Buffer de sortie ou alors register_shutdown_function()

Posté : 04 sept. 2008, 14:10
par Invité
Et si à la fin de ta page tu envoie une requête AJAX vers une autre page PHP qui ferait les calculs.

Cela semblerait être le mieux.
Bah le soucis si on utilise Ajax c'est que n'importe quel joueur mal veillant pourra faire jouer l'IA en envoyant les bons paramètre en GET vers l'url du script Ajaxifié....

A moins qu'il y a ait un moyen de sécuriser ca, mais là j'le vois pas.

Posté : 04 sept. 2008, 14:15
par akrogames
Et si tu fais passer les info en POST et que dans ton fichier PHP distant tu vérifie d'où viennent les informations cela ne marche pas ?

Posté : 04 sept. 2008, 14:28
par Sékiltoyai
Buffer de sortie ou alors register_shutdown_function()
Euh,
Depuis PHP 4.1, les fonctions d'extinction sont appelées comme une partie de la requête