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

  FORUM HardWare.fr
  Programmation
  PHP

  Affichage progressif [Résolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage progressif [Résolu]

n°821086
kowalski
Posté le 12-08-2004 à 09:29:28  profilanswer
 

J'ai besoin d'aide...
 
Pour une appli, j'ai besoin de créer plusieurs images et de les envoyer par mail ensuite.
 
J'ai tout le code pour faire cela, mais j'ai quelques soucis.
 
Lorsque je crée les images, elles ne sont pas crées dans la seconde j'imagine sur le serv, donc la suite du code qui est sensée envoyer l'email n'arriver par à envoyer toutes les images, certaines sont manquantes...
 
J'ai essayé de faire un affichage progressif avec des <table> pour la création des images, puis un delay(5), mais ca ne sert à rien, rien ne s'affiche avant que le script soit complété (je suis à l'intérieur d'une fonction)...
 
Alors Je ne sais pas trop comment m'y prendre. Soit je scinde en 2 scripts exécutés à des h différentes (mauvaise solution), soit je trouve une manière de faire afficher les données puis de prendre en compte mon delay ensuite...
 
Si vous pouviez m'aider...
 
Pour le moment la création d'image se passe ainsi : appel dans un <img src> d'un image.php3 qui fait la création. J'ai essayé de faire plutot un include, mais ca ne fonctionne pas...
 
So, please help ;)
 
NEW QUESTION
 
En somme, ce que je veux savoir, c'est comment php peut afficher progressivement les "echo" de mon code php. Par exemple j'ai des echo, un "sleep(5);" puis des echo. Je veux que les premiers echos s'affichent. Il n'y a pas de tableau, il y a rien. c'est du texte tout ce qu'il ya de plus bete !
 
MEGA HELP PLEASE !!


Message édité par kowalski le 13-08-2004 à 13:09:27
mood
Publicité
Posté le 12-08-2004 à 09:29:28  profilanswer
 

n°821171
Dj YeLL
$question = $to_be || !$to_be;
Posté le 12-08-2004 à 10:42:45  profilanswer
 

Normalement la creation d'image est instantanée ... il ne me semble pas que le code qui se trouve après la portion de creation ne s'execute avant que celle ci soit terminée ...


---------------
Gamertag: CoteBlack YeLL
n°821308
kowalski
Posté le 12-08-2004 à 12:10:15  profilanswer
 

Il y a bcp d'images à créer, et tout ce que je fais, c'est des img src, donc pour mon fichier php, qui appelle les images, il passe à l'envoi d'email sans réellement savoir si les images ont été crées... Je m'exprime peut etre super mal en fait ;)

n°821310
Dj YeLL
$question = $to_be || !$to_be;
Posté le 12-08-2004 à 12:12:44  profilanswer
 

Euh, nan là j'avoue que j'ai du mal à suivre :( Désolé


---------------
Gamertag: CoteBlack YeLL
n°821325
kowalski
Posté le 12-08-2004 à 12:19:50  profilanswer
 

Je reexplique.
J'ai un code php qui appelle plusieurs fois la création d'image, en faisant <img src=image.php?param>. Directement dans la suite du code principal, ces fichiers, créés par les image.php3 sont ajoutés comme pieces jointes à un mail. Hors souvent, certains de ces fichiers n'ont pas encore tous été créés par mes image.php tu suis ? En somme je voudrais soit, pouvoir afficher mes <img src> dès le départ, puis mettre un delay de 5sec, soit les lancer avec un include ou qqch qui me permet d'etre sur que les fichiers ont été créés avant de passer à l'envoi du mail...

n°821972
kowalski
Posté le 12-08-2004 à 23:38:13  profilanswer
 

En somme, ce que je veux savoir, c'est comment php peut afficher progressivement les "echo" de mon code php. Par exemple j'ai des echo, un "sleep(5);" puis des echo. Je veux que les premiers echos s'affichent. Il n'y a pas de tableau, il y a rien. c'est du texte tout ce qu'il ya de plus bete !

n°822022
b4ckUp
263 §
Posté le 13-08-2004 à 02:38:20  profilanswer
 

Salut,  
j'ai connu les mêmes problèmes pour mon site qui doit creer des thumbs puis les envoyer sur des mirroirs distants et donc pour répondre à certains NON la creation d'image n'est pas instantanée (ok c'est instantané si on a un Xeon 3.06Ghz et 2Gb de ram..) bref,
 
soit tu as une version récente de php et tu as :    PHP 4 >= 4.1.0, PHP 5) pcntl_waitpid -- Attend la fin de l'exécution d'un processus fils
 
cette fonction là devrait t'être utile, moi je sais que j'ai une version plus ancienne sur mon serveur, j'ai donc feinté. J'ai requp les PID des process qui tranforment les images et j'attend qu'ils soient terminés. (le serveur est bien évidemment sous unix)
 
j'utilise ça: while(exec('/bin/bash -c "/bin/ps -aux | grep '.$shell_pid.' | grep -v grep | wc -l"') != 0) { echo '.'; sleep(2); }
et on règle le sleep en fonction de la rapidité (là c'est pour envoyer sur les mirroirs distant donc comme mon up est assez limité ça sert à rien de boucler toutes les 10ms donc 2s ça reste correct et pas trop lent..)
 
voilà avec ça ça marche nickel, pas trop de charge CPU et au moins les scripts avancent à leur vitesse...
 
J'espère avoir pu t'aider
 

n°822048
Dj YeLL
$question = $to_be || !$to_be;
Posté le 13-08-2004 à 08:24:44  profilanswer
 

Je ne disais pas que la création est instantannée dans le sens (hop, en 0.0001 seconde l'image est créée) mais dans le sens que le script ne continue pas à s'executer tant que l'image n'est pas créée ...
 
Perso je viens d'essayer une boucle de création d'image en 640x480 qui vient de m'en créer 60 pour les réutiliser justre après, dans le meme script ... et ça passe... et mon serveur est loin d'etre un Xeon Machintruk ... c'est un pov' Pentium 3 ...


---------------
Gamertag: CoteBlack YeLL
n°822145
T509
$job-&gt;GetJob(now)
Posté le 13-08-2004 à 10:33:30  profilanswer
 

Le souci c'est que image.php est totalement disjoint du script de la page principale. Cela revient donc au bon vouloir du navigateur pour appeler image.php
 
Il arrive donc que ton script principal soit terminé (avec l'envoi des mails) avant que tous les appels de image.php ne soient faits. Les processus sont diférents et n'ont donc aucun lien.
 
La seule chose que je te conseille, c'est d'intégrer le traitement d'image.php dans la même page que ton script principal.


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
n°822166
b4ckUp
263 §
Posté le 13-08-2004 à 11:01:14  profilanswer
 

Nononon, pas chez moi... En effet je sais pas comment réagit php dans ces cas là mais chez moi il "passait" sa route même si c'était pas vraiment terminé..
ex un exec(); n'était pas encore terminé, bah il continuait.. j'ai trouvé ce comportement assez bizarre et je n'ai jamais pu l'expliquer, mais en tout cas ça marchait pas  :sweat:

mood
Publicité
Posté le 13-08-2004 à 11:01:14  profilanswer
 

n°822240
Sebastien
Posté le 13-08-2004 à 12:26:17  profilanswer
 

Peut etre que je susi à l ouest mais les fonctions ob_ peuvent peut etre t aider.

n°822241
b4ckUp
263 §
Posté le 13-08-2004 à 12:29:34  profilanswer
 

ob_* (start, flush) servent à l'affichage et non au traitement du script en lui même.. d'ailleurs j'ai jamais *vraiment* reussis à les faire fonctionner. si quelqu'un à a me montrer un exemple qui marche j'suis prenneur...

n°822244
kowalski
Posté le 13-08-2004 à 12:31:02  profilanswer
 

T509 a écrit :

Le souci c'est que image.php est totalement disjoint du script de la page principale. Cela revient donc au bon vouloir du navigateur pour appeler image.php
 
Il arrive donc que ton script principal soit terminé (avec l'envoi des mails) avant que tous les appels de image.php ne soient faits. Les processus sont diférents et n'ont donc aucun lien.
 
La seule chose que je te conseille, c'est d'intégrer le traitement d'image.php dans la même page que ton script principal.


 
Le petit problème c'est que j'appelle une image grace à img src. Si je fais un include, il me dis que les headers ont déjà été envoyés... Vous avez une idée à ce sujet ?

n°822246
b4ckUp
263 §
Posté le 13-08-2004 à 12:33:50  profilanswer
 

montre le code, parce que là c'est plutôt flou.. normalement un <img src=> </img> dans un bête <body></body> ça nécessite pas trop les headers hein... sinon tu as regardé du côté du pcntl_waitpid ?

n°822247
Sebastien
Posté le 13-08-2004 à 12:35:14  profilanswer
 

b4ckUp a écrit :

ob_* (start, flush) servent à l'affichage et non au traitement du script en lui même.. d'ailleurs j'ai jamais *vraiment* reussis à les faire fonctionner. si quelqu'un à a me montrer un exemple qui marche j'suis prenneur...


 
création d'un pdf, meme si le code va pas vraiment t'aider.
 

Code :
  1. ob_start();
  2.         $pdf = new Reponse();
  3.         $pdf->Open();
  4.         $pdf->AliasNbPages();
  5.         $pdf->definitionFont();     
  6.         $pdf->lettre_reponse($_SESSION["id_reclamation"], $dispo_pages, $tab_lettre, $qualite, $_SESSION['destrep']);
  7.         $string = ob_get_clean();


Message édité par Sebastien le 13-08-2004 à 12:38:25
n°822248
kowalski
Posté le 13-08-2004 à 12:37:09  profilanswer
 

b4ckUp a écrit :

montre le code, parce que là c'est plutôt flou.. normalement un <img src=> </img> dans un bête <body></body> ça nécessite pas trop les headers hein... sinon tu as regardé du côté du pcntl_waitpid ?


 
Non, tu as posté au même moment que moi, je vais jetter un coup d'oeil là...
<img src=image.php></img>. Ce image.php crée une image, ok ?
Sauf que si je fais indlude("image.php" ); l'image ne se crée pas, car les headers de la page qui appelle image.php ont déjà été envoyés.

n°822249
b4ckUp
263 §
Posté le 13-08-2004 à 12:38:23  profilanswer
 

Sebastien a écrit :

création d'un pdf, meme si le code va pas vraiment t'aider.


pas vraiment non  :heink: !
 
mais bon, je cherchais plutôt à balancer un truc du style "Patientez on traite votre requête" mais chez moi, ça l'envoie juste avant qu'il rafrachisse la page. explication
 
on lance la requête qui est *longue* y'a l'écran blanc/la même page (ça dépend ie/firefox) et puis après en 1s y'a mon message qui s'affiche, puis la nouvelle page (donc la requête est terminée..) qui s'affiche..
 
en gros ça n'a servi à rien le ob_start(); quoi..

n°822250
b4ckUp
263 §
Posté le 13-08-2004 à 12:39:11  profilanswer
 

kowalski a écrit :

Non, tu as posté au même moment que moi, je vais jetter un coup d'oeil là...
<img src=image.php></img>. Ce image.php crée une image, ok ?
Sauf que si je fais indlude("image.php" ); l'image ne se crée pas, car les headers de la page qui appelle image.php ont déjà été envoyés.


tu envoies des headers dans image.php? montre le début du script..

n°822251
kowalski
Posté le 13-08-2004 à 12:39:15  profilanswer
 

-> je reviens, je vais dejeuner, merci d'essayer de m'aider je suis à vous dans 15 mn

n°822252
Sebastien
Posté le 13-08-2004 à 12:40:28  profilanswer
 

Ben ca peut servir aussi par exemple si tu as un tres tres long tableau qui doit s afficher et que tu veux pas qu'il s'affiche etape par etape.
Tu lances ton ob_start et à la fin tu le termines, comme ca tout s'affiche d'un coup et juste avant tu peux mettre ton petit message de patience.

n°822255
b4ckUp
263 §
Posté le 13-08-2004 à 12:41:52  profilanswer
 

oui, sauf que chez moi ça marche pas comme je veux :)
 
okay bonap' à toi.


Message édité par b4ckUp le 13-08-2004 à 12:43:07
n°822257
b4ckUp
263 §
Posté le 13-08-2004 à 12:46:46  profilanswer
 

regarde mon code..  

Code :
  1. if(strlen(trim($_REQUEST['motsclef'])) > 0 && !isset($_GET['id'])) {
  2.  ob_start();
  3.  include('wait.htm');
  4.  ob_end_flush();
  5.  ob_start();
  6.                  [....] code du moteur de recherche.. la requête étant longue on balance wait.htm en attendant..
  7. include('endwait.htm');
  8. echo '<br><a href="index.php">faire une nouvelle recherche</A>';
  9. }


voilà j'ai testé ça et bon bah j'ai pas le wait.htm qui s'affiche, sauf à la toute fin et encore 1fois sur 20... j'dois mal l'utiliser..

n°822272
kowalski
Posté le 13-08-2004 à 13:08:52  profilanswer
 

Je suis désolé, je viens de comprendre mon idiotie...
 
En fait en fonction des paramètres, le fichier image.php crée une image visible par le navigateur ou la crée sur le serv... Et comme un idiot, j'envoyais les headers avant de savoir si l'image allait etre crée physiquement ou non..
 
En somme, image.php envoyait des headers au navigateur meme si l'image ne devait pas d'afficher...
 
l'erreur était con, j'ai mis des heures à la voir...
 
Désolé... :'(
 
PS : à la base je pensais qu'en créant le fichier sur le serveur, elle serait également affichée, mais en lisant bien la doc de php.net, j'ai compris...

n°822276
kowalski
Posté le 13-08-2004 à 13:10:38  profilanswer
 

Enfin, j'ai reglé mon probleme comme cela, mais ca ne change rien au fait qu'il ne m'affiche pas progressivement mon tableau par exemple... Evidemment j'ai trouvé une parade "propre" à cela, mais bon, ca m'intéresse !

n°822287
b4ckUp
263 §
Posté le 13-08-2004 à 13:18:30  profilanswer
 

kowalski a écrit :

Je suis désolé, je viens de comprendre mon idiotie...
 
En fait en fonction des paramètres, le fichier image.php crée une image visible par le navigateur ou la crée sur le serv... Et comme un idiot, j'envoyais les headers avant de savoir si l'image allait etre crée physiquement ou non..
 
En somme, image.php envoyait des headers au navigateur meme si l'image ne devait pas d'afficher...
 
l'erreur était con, j'ai mis des heures à la voir...


c'est malin  :pt1cable: ! mais bon c'est souvent comme ça que ça se passe.. y'a 3jours j'ai mis 1h à *débug* un truc qui *marchait* mais bon le temps de comprendre que j'étais bête.. Bah pour le ob_start(); j'sais pas, j'ai jamais reussis à le faire vraiment marcher. yapluka attendre sebastien  :jap:

n°822300
Sebastien
Posté le 13-08-2004 à 13:30:16  profilanswer
 

Na je vais pas trop m avancer peur de dire des conneries ;-)
je m'en sers pour eviter certains affichages apres j'en ai pas forcement eu la meme utilisation.
 
Generalement je m'en sers pour construire une page et apres si je m'apercois qu'il y a un soucis quelque part, hop je lance un header, ce qui me permet de pas avoir de probleme.

n°822308
b4ckUp
263 §
Posté le 13-08-2004 à 13:37:37  profilanswer
 

Sebastien a écrit :

Na je vais pas trop m avancer peur de dire des conneries ;-)


 
bon bha tantpis  :sweat:

mood
Publicité
Posté le   profilanswer
 


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

  Affichage progressif [Résolu]

 

Sujets relatifs
[GD] [RESOLU] Probleme avec imagecolorallocate[vba]Optimisation du code pour la rapidité (résolu)
Liste déroulante: affichage de données spécifiquesreplace[resolu]
[VBA]Passer d'une zone de texte à une autre (résolu)[Résolu à 50%]Librairie MIDI multiplateforme
[MFC] Affichage dans une fenetre texte[resolu] La zone de données passée à un appel système est insuffisante
Grep? besoin de la colonne d'une seq recherchee: RESOLU 
Plus de sujets relatifs à : Affichage progressif [Résolu]


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