Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1704 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1454929
Yoyo@
Posté le 10-10-2006 à 16:13:13  profilanswer
 

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.

mood
Publicité
Posté le 10-10-2006 à 16:13:13  profilanswer
 

n°1454941
j_lecruel
☀ ☁ ☂
Posté le 10-10-2006 à 16:18:54  profilanswer
 

Regarde du coté des fonctions de bufferisation...


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
n°1454969
Ricco
Retour au pays
Posté le 10-10-2006 à 16:36:30  profilanswer
 

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
n°1455014
omega2
Posté le 10-10-2006 à 17:28:53  profilanswer
 

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.

n°1455135
Yoyo@
Posté le 10-10-2006 à 23:05:45  profilanswer
 


 
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.

n°1455136
Yoyo@
Posté le 10-10-2006 à 23:07:30  profilanswer
 

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)

n°1455137
Yoyo@
Posté le 10-10-2006 à 23:09:56  profilanswer
 

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

n°1455144
Yoyo@
Posté le 10-10-2006 à 23:23:50  profilanswer
 

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?

n°1455248
Yoyo@
Posté le 11-10-2006 à 10:47:29  profilanswer
 

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)
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Plusieurs "submit" dans une meme page ?Exporter formulaire HTML en CSV pour Excel sans PHP
Utilisation de plusieurs contrôles utilisateurs dans une même page[Php & MySQL] Problème pour création de tables
Je ne comprend rien au PHPSite en PHP: 'ai toute la base de donnée mais comment le faire?
Ldap + Php pour trouver le SID d'un userUne colle : faire communiquer PHP et Webdev
Faire un formulaire pour laisser des commentaires sur une page web...Récupérer le résumé d'une page html
Plus de sujets relatifs à : [PHP]Cmt faire un post traitement?(après envoi de la page au client)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR