IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comportement bizarre de php : affichage à la fin ?


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut Comportement bizarre de php : affichage à la fin ?
    bonjour à tous et merci par avance

    je ne comprends pas comportement de ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $k = 0 ;
    while ($k <=4)
    	echo 'coucou' . $k ;
    	sleep(5);
    	$k = $k +1 ;
    }
    normalement il devrait faire
    coucou 1
    attente 5 secondes
    coucou 2
    attente 5 secondes
    ...

    or, il attends 20 secondes (4x5) et il affiche tout d'un coup !!!!

    je me suis dit, ça doit etre la fonction sleep ....
    et j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $k = 0 ;
    while ($k <=70)
    	echo 'coucou' . $k ;
    	$i = 0 ;
    	while ($i <=500000)
    	{
    		$i = $i +1;
    	}
    	$k = $k +1 ;
    }
    meme problème !!!!

    si par contre je rajoutte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $k = 0 ;
    while ($k <=70)
    	echo 'coucou' . $k ;
    	$i = 0 ;
    	while ($i <=500000)
    	{
    		$i = $i +1;
    		echo $i ;
    	}
    	$k = $k +1 ;
    }
    j'ai rajouté le echo $i ;

    là c'est un peu plus coherent
    il me fait
    coucou1
    1234.....il compte jusqu'à 500000
    coucou2
    1234.....il compte jusqu'à 500000
    sauf qu'il me fait de l'affichage pour la boucle de 1 à 5000000

    j'ai l'impression qu'il stocke l'affichage et qu'il ne le renvoi qu'à la fin du script !!
    est ce que vous avez une opinion

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 60
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    En fait çe n'est pas PHP qui est en cause.

    Ton script est exécuté sur le serveur, qui envoi le résultat à ton navigateur.
    En fait je pense que si tu as beaucoup de choses à afficher (comme tes 50milions de chiffres), le serveur envoi plusieurs paquets, qui sont affichés au fur et à mesure.
    Mais si tu as 5 coucous à afficher, tout ce texte est envoyé en 1 fois, donc afficher d'un coup à la fin du script.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    merci pour ta réponse

    donc si je comprends bien mon serveur il ne m'obéit pas ... il fait ce qu'il veut
    ou est-ce le navigateur ?

    (est ce qu'il y a un moyen de "tracer" ce qui se passe entre le navigateur et le serveur ? fichier de log ou autre ....)

    si j'ai bien compris :
    avec le cas des sleep, le serveur fait :
    il met l'instruction echo coucou1
    il attend 5s
    il met l'instruction echo coucou2
    ....
    ...
    il attend 5s

    ET il envoi tout d'un seul coup au navigateur qui lui affiche ... d'un seul coup?
    Donc, il stocke l'affichage tant qu'il n'est pas trop gros ...

    par contre dans le cas, où il à bcp de choses à afficher, là il fait des envois réguliers ...

    ----------------------------------------------------------
    j'ai mis un autre post :
    http://www.developpez.net/forums/d67...s/#post3965485
    avec un problème d'envoi de mail en nombre (publipostage) et je m'apercevais qu'il faisait l'affichage de l'envoi des mails (le mail à été envoyé à toto1) à la fin
    Et comme, il ne marche pas bien, je pensais que le problème venait peut etre du pb de comportement du serveur
    mais maintenant avec ta réponse je ne pense que ça n'a rien à voir ...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 32
    Points : 16
    Points
    16
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for ($k = 0; $k<5; $k++)
    {
    	echo 'coucou ' . $k;
    	sleep(5);
    }

  5. #5
    FoxLeRenard
    Invité(e)
    Par défaut
    Il faudrait faire un cour sur les serveurs pour expliquer cela,
    mais en simplifiant beaucoup , on peut dire que le but d' un PHP, est d' envoyer au visiteur (client) un HTML fini celui qui envoie a un controleur éventuel javascript , la réponse onload !

    Donc le php commence ta page, mais si le serveur est trop chargé, il va "servir" d'autres visiteurs, puis revenir a toi, pour faire cela, il se sert d'une variable de dépassement de temps, mais avant de passer au suivant il t'envoie la partie déjas réalisée ....

    S'il a le temps de faire ta page il se la gardera et ne l'enverra que lorsqu'elle est finie !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Merci à tous les 2 pour vos réponses
    @Gauldo : la boucle for, ne change rien, mais c'est en modifiant ton script que je viens d'avancer dans mon pb !

    @FoxLeRenard : merci pour les explications, c'est vrai que j'aurais besoin d'un cours sur les serveurs, (si tu as des tutos ....) mais j'ai compris ton explication

    Par contre en travaillant sur le scrip où il y a un sleep, je viens de mieux identifier mon pb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for ($k = 0; $k<5; $k++)
    {
    	echo 'coucou ' . $k;
    	sleep(2);
    }
    si je mets 2 secondes, j'attends 2x5 =10 secondes et j'ai mon affichage d'un seul coup, ce qui est normal vu l'explication sur le serveur

    si je mets 5 secondes, j'ai un erreur
    L'URL demandée n'a pu être chargée ... Réponse de taille nulle
    je suppose qu'il y a un timeout .... mais normalement 20 secondes, ça doit passer ...

    MAIS mon problème vient du fait que dans le fichier access_log d'apache il y a QUINZE FOIS la requete GET
    donc il me demande 15 fois la page
    POURQUOI ????

    le pb, c'est que normalement j'ai pas un sleep mais la fonction mail (publipostage)
    je suppose qu'elle met du temps à se réaliser et donc j'ai 15 appels de la page et donc 15 mails pour chaque personnes (au lieu de 1)

    voyez-vous pourquoi il me redemande plusieurs fois la page ?
    Merci par avance

  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Ca c' est un autre probléme !! il faudrais que je lises tout le PHP
    concerné et Tout ces includes !!!

    Si c' est trop gros, ZIP et mets ça en piéce jointe

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    voici le code
    j'ai enlevé l'inutile (connection serveur mysql, variable de texte, ...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    $from = $nom." <".$from.">";
     
    $limite = "_----------=_parties_".md5(uniqid (rand()));
     
    $header  = "Reply-to: ".$from."\n";
    $header .= "From: ".$from."\n";
    $header .= "X-Sender: <".$site.">\n";
    $header .= "X-Mailer: PHP\n";
    $header .= "X-auth-smtp-user: ".$from." \n";
    $header .= "X-abuse-contact: ".$from." \n";
    $header .= "Date: ".date("D, j M Y G:i:s O")."\n";
    $header .= "MIME-Version: 1.0\n";
    $header .= "Content-Type: multipart/alternative; boundary=\"".$limite."\"";   // si c'est un message txt et html
    //$header .= "Content-Type: multipart/mixed; boundary=\"".$limite."\"";   // si message txt html et piece jointe
     
     //-----------------------------------------------
     //requete
     //-----------------------------------------------
     
     
     
     
    $sql = "SELECT mail, pwd FROM t_essai" ; 
    $reponse = mysql_query($sql) or die(mysql_error());
     
    while ($donnees = mysql_fetch_array($reponse) )
    {
    			$message = "";
    			$message .= "--".$limite."\n";
    // message html
    			$message .= "Content-Type: text/plain\n";
    			$message .= "charset=\"iso-8859-1\"; ";
    			$message .= "Content-Transfer-Encoding: 8bit;\n\n";
    			$message .= $text_1 . $donnees['mail'] . $text_2 . $donnees['pwd'] . $text_3 ;
     
     
     
    			$message .= "\n\n--".$limite."\n";
    			$message .= "Content-Type: text/html; ";
    			$message .= "charset=\"iso-8859-1\"; ";
    			$message .= "Content-Transfer-Encoding: 8bit;\n\n";
     
     
    			$message .= $html_1 . $donnees['mail'] . $html_2 . $donnees['pwd'] . $html_3 ;
    			$message .= "\n--".$limite."--";
     
    //envoi mail			
    			$to = $donnees['mail']  ;
     
    			if(mail($to, $sujet, $message, $header)) 
    			{
    				echo 'Le message a été envoyé à ' . $to . ' - <br />';
    			}
    			else
    			{
    				echo 'Le message n\'a pu être envoyé' ;
    			} 
     
    }
    en fait, rien de compliqué ...
    une fonction mail qui boucle sur tous les enregistrements d'une table mysql
    ça marche très bien s'il y a 4 enregistrements, mais s'il y en a 70, il y a 11 requete GET qui se font sur la meme page et donc 11 mails pour chacun des 70 personnes ...

  9. #9
    FoxLeRenard
    Invité(e)
    Par défaut
    Oui vraiment rien de bien visible dans ton PHP,
    par contre il est lancé par un clic sur un lien d'un autre PHP, je supposes ?

    De toute façon, cela ressemble a un probleme serveur ??

    Mais si ta base de donnees est un test et que tu arrives a passer 4 mails,
    as tu determiné celui qui relançait tout ??
    le 5em , le 6em ou le 7em ??

    Ce serait interessant de les tester individuelement ces 3 là

  10. #10
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Hello,

    Pour répondre à la question initiale, Il y a en effet plusieurs raisons, quelques
    explications ici
    Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !

  11. #11
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par marcha Voir le message
    Hello,

    Pour répondre à la question initiale, Il y a en effet plusieurs raisons, quelques
    explications ici
    Whaou mille mercis l'Ami, ça c' est trop génial
    Décidément on en apprend tout le temps

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    merci à vous 2

    en fait, j'ai du nouveau :
    ce serait un pb de dialogue entre nos 2 serveurs apache
    un timeout régle un peu court (10 secondes)
    comme il n'y aurait pas de retour apache redemande la page

    dès que j'en sais plus, je mets un message

    merci

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Bonjour et merci à tous pour vos contributions

    le pb est résolu

    en fait, il y 2 serveurs apache l'un derrière l'autre
    le mien etant le 2nd

    sur le 1er, il y avait ds le fichier de config d'apache la variable Timeout réglé sur 10 (secondes)
    le passage à 30 secondes à résolu mon pb ...

    je suppose que le 1er apache envoyé une requete au 2nd apache
    comme la demande prenait plus de temps que les 10 secondes
    le 1er apache renvoyez la demande (et je ne comprends pas pourquoi, il relance la demande ....)
    ceci 11 fois de suite (je ne sais pas pourquoi 11 fois ...)

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WB18] Comportement bizarre avec IE9 - affichage page interne
    Par fdelepine dans le forum WebDev
    Réponses: 1
    Dernier message: 23/12/2013, 00h43
  2. Comportement bizarre de l'affichage avant un select
    Par maximus15 dans le forum Réseau
    Réponses: 2
    Dernier message: 31/03/2010, 04h06
  3. [PHP-JS] Comportement bizarre
    Par shelko dans le forum Langage
    Réponses: 3
    Dernier message: 26/06/2007, 14h57
  4. [PHP-JS] Comportement bizarre condition if
    Par webrider dans le forum Langage
    Réponses: 9
    Dernier message: 17/02/2007, 09h20
  5. Réponses: 4
    Dernier message: 27/10/2006, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo