[PHP]Cmt faire un post traitement?(après envoi de la page au client)

Cmt faire un post traitement?(après envoi de la page au client) [PHP] - PHP - Programmation

Marsh Posté le 10-10-2006 à 16:13:13    

Salut,
 
Ma question est simple:
 
Je voudrais afficher une page sur mon client, et ensuite seulement, une fois que cette page est affichée, effectuer un traitement. (et que donc le client n'ait à subir aucun impact si le traitement s'avère long).
 
Comment faire?
Est ce seulement possible?
 
Pour info j'utlise un serveur Apache 2.2 et PHP 4.4.1.

Reply

Marsh Posté le 10-10-2006 à 16:13:13   

Reply

Marsh Posté le 10-10-2006 à 16:18:54    

Regarde du coté des fonctions de bufferisation...


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 10-10-2006 à 16:36:30    

Tu peux ( aussi ... ? ) utiliser un web bug http://en.wikipedia.org/wiki/Web_bug


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 10-10-2006 à 17:28:53    

Pourquoi ne pas faire tout simple :
faire les echo/print/... nécessaire et rajouter du code aprés le dernier echo/print/... .
 
Au pire, le client véra son navigateur attendre encore un peu une fin de page alors que le navigateur a tout reçu. En attendant même si le client voit l'indicateur de récupération bouger dans son navigateur, ca n'empéchera pas le navigateur d'afficher la page comme il faut.

Reply

Marsh Posté le 10-10-2006 à 23:05:45    


 
Bah disons que j'avais pensé à faire des ob_flush() et flush() (dont les résultats sont différents selon qu'on utilise Apache sous Win ou sous Linux), mais ça ne m'a rien donné...
 
Mon but était de printer tout ce dont j'ai besoin, puis de faire un flush, que le client ait l'impression que sa page est chargée ete que je puisse faire mes traitement en fin de script...mais sans succès.

Reply

Marsh Posté le 10-10-2006 à 23:07:30    

Ricco a écrit :

Tu peux ( aussi ... ? ) utiliser un web bug http://en.wikipedia.org/wiki/Web_bug


 
Ah oui, je n'y avais pas pensé à ça. Cad finalement demander à mon client de faire une requête invisible qui appellerait mon post traitement...
 
Pas mal comme idée, mais quelque part, ça me demanderait un code assez lourd, en particulier de m'assurer que le traitement n'est pas appelé plusieurs fois, etc...
Je préfère donc voir si je ne peux pas trouvre une autre méthode (mais je garde ça sous le coude)

Reply

Marsh Posté le 10-10-2006 à 23:09:56    

omega2 a écrit :

Pourquoi ne pas faire tout simple :
faire les echo/print/... nécessaire et rajouter du code aprés le dernier echo/print/... .
 
Au pire, le client véra son navigateur attendre encore un peu une fin de page alors que le navigateur a tout reçu. En attendant même si le client voit l'indicateur de récupération bouger dans son navigateur, ca n'empéchera pas le navigateur d'afficher la page comme il faut.


 
Oui, faire les echo/print avant mon traitement, et surtout les flusher pour qu'ils arrivent au client avant le début de mon traitement...
 
Mais ce qui m'embête là dedans, c'est que mon traitement peut par moment prendre plusieurs secondes (envoi d'un mail, qui peut prendre plusieurs secondes selon la réactivité du serveur mail). Et ça m'embête de me dire que mon client puisse avoir une barre "loading", donnant l'impression à l'utilisateur que le site est lent...

Reply

Marsh Posté le 10-10-2006 à 23:23:50    

Alors, pour info, mon but est de faire une redirection de mon client (avec un header de type location) puis ensuite, alors que mon client est redirigé, faire mon post traitement (cad à la fin de ma première requête qui a redirigé le client)
 
Je voudrait donc un truc du ge[fixed][/fixed]nre:
 
header('Location: www.xyz.com');
//Ici, j'aimerais que le client ait quitté la requête et ne soit plus en attente
$mypostprocessing();
 
Vous voyez le truc?

Reply

Marsh Posté le 11-10-2006 à 10:47:29    

Me revoilà.
 
J'ai trouvé la solution:
 


<?php
  header('Location: http://www.google.fr');
  print ' ';
  ob_end_flush();
  flush();
  sleep(15);
?>


 
En fait, auparavant, ça ne marchait pas, car après mon header, je n'écrivais aucun caractère dans le flux. Now, en écrivant simplement un espace dans le flux avant de flusher, ça fonctionne correctement.
 
Je ne comprends pas exactement pourquoi (car le flush est quand même fait même quant je n'écris pas de caractère, je viens de le vérifier)
 
Mais au moins, ça marche ! (cad que la redirection est faite instantanément, bien avant le sleep)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed