Bufférisassions des sorties [Résolu]

Messages postés
146
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
19 septembre 2019
- - Dernière réponse : scn68100
Messages postés
146
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
19 septembre 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
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
6709
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
4
1
Merci
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+

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 201 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mpmp93
Messages postés
146
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
19 septembre 2019
0
Merci
Bonjour,
Merci d'avoir répondu
Cordialement
Commenter la réponse de scn68100