Bufférisassions des sorties [Résolu]

scn68100 96 Messages postés dimanche 27 août 2006Date d'inscription 4 juin 2018 Dernière intervention - 2 févr. 2015 à 18:02 - Dernière réponse : scn68100 96 Messages postés dimanche 27 août 2006Date d'inscription 4 juin 2018 Dernière intervention
- 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 

Votre réponse

2 réponses

Meilleure réponse
mpmp93 6713 Messages postés mercredi 13 avril 2011Date d'inscription 28 septembre 2015 Dernière intervention - 2 févr. 2015 à 20:31
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+

Merci mpmp93 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de mpmp93
scn68100 96 Messages postés dimanche 27 août 2006Date d'inscription 4 juin 2018 Dernière intervention - 3 févr. 2015 à 07:10
0
Merci
Bonjour,
Merci d'avoir répondu
Cordialement
Commenter la réponse de scn68100

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.