scn68100
Messages postés153Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention26 décembre 2019
-
2 févr. 2015 à 18:02
scn68100
Messages postés153Date d'inscriptiondimanche 27 août 2006StatutMembreDernière intervention26 décembre 2019
-
3 févr. 2015 à 07:10
Bonjour,
J'ai une page PHP avec un traitement assez "lourd" dans une boucle
Lors de son exécution, j'ai une page blanche, avec le sablier dans l'index
L'affichage se fait au bout d'un certain temps, et j'ai tout à la fois le tag H1, les premiers ECHO, et la simulation de la barre de progression fait par insertion d'image pratiquement remplie
Est-il possible que la chronologie de l'affichage suive la chronologie de l'exécution ?
C'est-à-dire affichage du tag H1
Puis affichage des premier ECHO "
Puis la vue de la barre de progression par l'affichage successif de l'image
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta content="fr" http-equiv="Content-Language"> <title>Creation de la base</title> </head> <body> <h1>Création des bases</h1>
<?php
$Cpt=0; $Ind=0;
// Voir GeoLocDocumentation.txt // GeoLiteCity-Blocks.csv startIpNum,endIpNum,locid $Cpt=0; $Fic_Blocks="GeoLocalisation/GeoLiteCity-Blocks.csv"; if (file_exists($Fic_Blocks)) { // IP."|".Page."|".URL."|".Date if (!$fp = fopen($Fic_Blocks,"r")) { echo "Echec de l'ouverture du fichier " . $Fic_Blocks; exit; } else { // Suppresion des enregistrements déja créés echo "Suppression de la table geolitecityblocks <br>"; $query = "TRUNCATE TABLE `geolitecityblocks`"; $OK = mysqli_query($connexion, $query); if ($OK===False) { echo "CreateBase.php - - Erreur à la suppression de la table geolitecityblocks " .mysqli_error($connexion) . "<br>"; exit ; } echo("<br> Suppression geolitecityblocks faite <br>"); // Création de la table geolitecityblocks $Cpt=0; echo "Début de la création de la table geolitecityblocks <br>"; while(!feof($fp)) { $line = fgets($fp,255); $Cpt++; if ($Cpt>2) { $Reste=$Cpt % 1000; if ($Reste==0) { echo '<img alt="ttt" src="ProgressBar.jpg">'; } $line=trim($line); //echo "Avant " . $line . "<br>"; $Test=str_replace(",","|",$line); //echo "Apre " . $Test . "<br>"; $p= explode('|',$Test); $Nbr = count($p); if ($Nbr=3) { //echo "p[0] " . $p[0] . " p[1] " . $p[1] . " p[2] " . $p[2] . "<br>"; $IP_Deb = $p[0] ; $IP_Fin = trim($p[1]) ; $locid = trim($p[2]) ; if ($locid=="") { $locid=" "; } set_time_limit ( 360); // Création de l'enregistrement set_time_limit ( 360); $reponse = mysqli_query($connexion, "SELECT * FROM geolitecityblocks WHERE IP_Deb = '" . $IP_Deb . "' AND IP_Fin = '" . $IP_Fin . "'") or die("CreateBase.php - Erreur à la recherche " . mysqli_error($connexion)); $NbrEng = mysqli_num_rows($reponse); if ($NbrEng < 1) { set_time_limit ( 360); $OK=mysqli_query($connexion, "INSERT INTO geolitecityblocks (IP_Deb,IP_Fin,locid) VALUES('".$IP_Deb ."' , '".$IP_Fin ."' , ". $locid.")") or die('<br> CreateBase.php - Error insertion : ' . mysqli_error($connexion)); } if ($OK===False) { echo "<br> CreateBase.php - - Erreur à l'insertion de la fiche !! " . mysqli_error($connexion) . "<br>"; exit ; } } } // FIN DE if ($Cpt>2) if ($Cpt>5000) { exit; } } // FIN DE while(!feof($fp)) } // FIN DU ELSE pour if (!$fp = fopen($Fic_Blocks,"r")) fclose($fp); // On ferme le fichier echo("<br> Création de la table geolitecityblocks " . str_pad ($Cpt , 8, $pad_string = " ", STR_PAD_LEFT) . " enregistrements lus <br>"); } // FIN DE if (file_exists($Fic_Blocks))
echo ("FIN" . "<br>"); ?>
</body> </html>
On me suggère d'utiliser ob_start() / ob_flush()
J'ai regardé les fonctions de bufférisassions des sorties, mais je n'ai pas trouvé d'exemple correspondant à mon besoin
Du coup, où que je place ces fonctions, elle ne change pas l'affichage
mpmp93
Messages postés6651Date d'inscriptionmercredi 13 avril 2011StatutMembreDernière intervention28 septembre 20154 2 févr. 2015 à 20:31
Bonjour,
A ma connaissance, ça va être très très difficile.... Il faudrait connaître le volume des données à afficher.
Et puis ça n'a pas grand intérêt. Le sablier est surtout là pour faire patienter quand les processus sont longs. L'idéal est de n'avoir aucun délai de traitement.