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 :

Boucle while et affichage progressif


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    Par défaut Boucle while et affichage progressif
    Bonjour,
    je suis sur OVH mutualisé et je cherche a afficher dans une boucle while plusieurs resultats de requetes mysql dans des echo.mais la page s'affiche que lorsque tout est fini.
    j'ai essayé d'inserer la fonction flush et ob_flush mas ca ne fonctionne apparement pas sur ovh mutualisé voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (ob_get_level() == 0) ob_start();
    while($resultat = mysql_fetch_array($requete))
    {
    	mail($resultat['email'],$sujet,$message,$headers);
    	echo str_pad('',4096)."\n";   
    	echo '<p>'.$resultat['email'].'</p>';
      	ob_flush();
    	flush();	
     	sleep(2);
    }
    ob_end_flush();
    est ce que c'est la mauvaise technique ? merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Pour faire ce genre d'affichage progressif, je pense qu'il faut plutôt utiliser AJAX

  3. #3
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    Par défaut
    J'ai cherché partout mais je ne trouve pas d'exemple de code

  4. #4
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    Salut,
    ça ne marchera pas avec php car tout simplement le navigateur ne reçoit aucune donnée du serveur juste après que le serveur finisse tout son travail.
    sleep ne ralentit pas l'affichage mais ralentit seulement l’exécution ça n'a rien à voir avec l'affichage.pour ce genre de trucs tu peux utiliser ajax ou bein une bibliothèque javascript qui supporte ajax comme jquery.
    bonne chance.

  5. #5
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par omar24 Voir le message
    Salut,
    ça ne marchera pas avec php car tout simplement le navigateur ne reçoit aucune donnée du serveur juste après que le serveur finisse tout son travail.
    sleep ne ralentit pas l'affichage mais ralentit seulement l’exécution ça n'a rien à voir avec l'affichage.pour ce genre de trucs tu peux utiliser ajax ou bein une bibliothèque javascript qui supporte ajax comme jquery.
    bonne chance.
    Tu as entièrement faux sur ce point.
    Lis donc la documentation de la fonction flush() et tu apprendras qu'elle permet d'envoyer avant la fin du script le buffer au navigateur.

    Cela dit il est aussi mentionné que cela ne fonctionnait pas sous certains serveurs et qu'il n'envoyait qu'à la fin. Ou même des problèmes de navigateur qui attend d'avoir tout reçu pour afficher (Netscape d'après la documentation), ou bien certaines version de IE qui attendent une taille minimum du buffer à afficher (256 octets).

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  6. #6
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    Personnellement, connaissant comment les technologies coté serveurs fonctionnent, je n'arrive pas à imaginer comment une seule requête HTTP va faire deux allers/retours au/du serveur?

  7. #7
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    Par défaut
    Euh dans mon cas pas besoin d'aller retour de requete http je veux juste afficher les données d'un tableau petit a petit apres chaque envoi de mail $resultat['email'] apres ma configuration serveur ne me permets surement pas de vider le buffer du serveur web je pense d'ou mon probleme.

  8. #8
    Membre habitué Avatar de omar24
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 159
    Points : 172
    Points
    172
    Par défaut
    Pour ton problème, je pense que tu dois absolument passer par AJAX.Si vous n'avez déjà travaillé avec AJAX essaye d'utiliser la bibliothèque de javascript jQuery, elle est facile à apprendre et à utiliser en plus ça facilite beaucoup les requêtes AJAX.

  9. #9
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par omar24 Voir le message
    Personnellement, connaissant comment les technologies coté serveurs fonctionnent, je n'arrive pas à imaginer comment une seule requête HTTP va faire deux allers/retours au/du serveur?
    Il n'y a aucun allez-retour.
    L'entête HTTP est envoyée lors du premier envoi, le reste suit au fur et à mesure tout simplement.
    C'est un peu comme du streaming en gros.
    Après il y a des navigateurs qui ne le gère pas et qui attendent d'avoir reçu la fin du fichier (dernier envoi buffer) avant de traiter la requête tout simplement...
    Sature ta connexion et testes plusieurs sites relativement lent avec différents navigateurs. Cela reproduit le même effet navigateur. Certains navigateurs t'afficheront une page blanche puis la page d'un seul bloc. D'autres t'afficherons la page au fur et à mesure qu'ils téléchargent le retour de la requête.

    Donc sur ce point je mettrai ton absolument entre parenthèse.
    Cela dit, je rejoins tes conseils, pour une telle chose il est préférable de passer par de l'ajax.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Salut

    Quelqu'un sur le forum de PHP à trouvé un moyen simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
        @apache_setenv('no-gzip', 1);
        @ini_set('zlib.output_compression', 0);
        @ini_set('implicit_flush', 1);
        for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
        ob_implicit_flush(1);
     
    	echo "hello";
    	sleep(3);
    	echo " peter";
    @voir: http://www.php.net/manual/en/function.flush.php

    C'est une façon de faire particulièrement immonde réservée à de très rares cas. Préfère l'utilisation d'Ajax à cette technique maudite.

  11. #11
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    Par défaut
    J'ai testé cette solution elle ne fonctionne pas sur mon serveur en tout cas. je vais regarder du coté de Jquery.

Discussions similaires

  1. [MySQL] [merci à Nnay ;)]Boucle while + SQL -> Affichage des données
    Par DiPSoMaNiE dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/01/2009, 11h45
  2. Réponses: 3
    Dernier message: 17/08/2007, 13h47
  3. [MySQL] Problème d'affichage dans un boucle while
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/05/2007, 08h31
  4. [MySQL] affichage d'une liste avec une boucle while
    Par Invité dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/01/2007, 20h19
  5. Réponses: 9
    Dernier message: 01/06/2006, 18h10

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