Bufférisassions des sorties

Résolu
scn68100 Messages postés 153 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 26 décembre 2019 - 2 févr. 2015 à 18:02
scn68100 Messages postés 153 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 26 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

Voici le code


<?php
error_reporting (E_ALL);
require "connexion.php";
?>

<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

Pouvez-vous m'aider ?
Cordialement
SC

2 réponses

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 4
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.

A+
1
scn68100 Messages postés 153 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 26 décembre 2019
3 févr. 2015 à 07:10
Bonjour,
Merci d'avoir répondu
Cordialement
0
Rejoignez-nous