Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/04/2011, 10h57   #1
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2002
Messages : 346
Points : 125
Points : 125
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 :
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
__________________
Ingénieur R&D Casual Gaming / Mobile
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 11h00   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Pour faire ce genre d'affichage progressif, je pense qu'il faut plutôt utiliser AJAX
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 15h31   #3
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2002
Messages : 346
Points : 125
Points : 125
J'ai cherché partout mais je ne trouve pas d'exemple de code
__________________
Ingénieur R&D Casual Gaming / Mobile
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 16h01   #4
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
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.
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/04/2011, 16h59   #5
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
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).
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 17h22   #6
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
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?
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 17h50   #7
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2002
Messages : 346
Points : 125
Points : 125
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.
__________________
Ingénieur R&D Casual Gaming / Mobile
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 18h00   #8
Membre habitué
 
Avatar de omar24
 
Homme Omar
Inscription : septembre 2010
Messages : 146
Détails du profil
Informations personnelles :
Nom : Homme Omar
Localisation : Maroc

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

Informations forums :
Inscription : septembre 2010
Messages : 146
Points : 125
Points : 125
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.
omar24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 19h01   #9
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
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.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 19h08   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Salut

Quelqu'un sur le forum de PHP à trouvé un moyen simple:
Code :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2011, 13h43   #11
Membre habitué
 
Avatar de Fooshi
 
Homme
Inscription : juin 2002
Messages : 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : juin 2002
Messages : 346
Points : 125
Points : 125
J'ai testé cette solution elle ne fonctionne pas sur mon serveur en tout cas. je vais regarder du coté de Jquery.
__________________
Ingénieur R&D Casual Gaming / Mobile
Fooshi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h47.


 
 
 
 
Partenaires

Hébergement Web