Délais d'affichage si boucle sur traitement important [Résolu]

Signaler
Messages postés
153
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
26 décembre 2019
-
Messages postés
153
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
26 décembre 2019
-
Bonjour,
J'ai une page PHP avec un traitement assez "lord" 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, le premier 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 du premier ECHO "Début de suppression de la table geolitecitylocation"
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;

$Fic_Location="GeoLocalisation/GeoLiteCity-Location.csv";		
if (file_exists($Fic_Location)) {	// IP."|".Page."|".URL."|".Date
	if (!$fp = fopen($Fic_Location,"r")) {
		echo "Echec de l'ouverture du fichier " . $Fic_Location;
		exit;
	} else {
		//	Suppresion des enregistrements déja créés
		$reponse = mysqli_query($connexion, "SELECT * FROM geolitecitylocation") or die("CreateBase.php - Erreur à la recherche " .mysqli_error($connexion));		
		$NbrEng = mysqli_num_rows($reponse);
		echo "Début de suppression de la table geolitecitylocation <br>";
		if ($NbrEng>0) {
			$Cpt=0;
			for ($i=0; $i<$NbrEng; $i++) { 
				$Cpt++;
				$Reste=$Cpt % 1000;
				if ($Reste==0) {
					echo '<img alt="ttt" src="ProgressBar.jpg">';
				}
				$donnees = mysqli_fetch_array($reponse);
				$locid=$donnees['locid'];
				set_time_limit ( 360);
				$OK=mysqli_query($connexion, "DELETE FROM geolitecitylocation WHERE locid =  " . $locid ) or die("CreateBase.php - Erreur à la suppression " .mysqli_error($connexion));
				if ($OK===False) {
					echo "CreateBase.php - Incident lors de la suppression de la fiche !! " .mysqli_error($connexion) . "<br>";
					exit ;
				}
			}
			echo("<br> Suppression geolitecitylocation " . str_pad ($Cpt , 8, $pad_string = " ", STR_PAD_LEFT) . " enregistrements supprimés <br>");
		}
 	}	// FIN DU ELSE DE if (!$fp = fopen($Fic_Location,"r"))
	fclose($fp); // On ferme le fichier
}	// FIN DE if (file_exists($Fic_Location))
echo ("FIN" . "<br>");
?>
</body>
</html>

Cordialement
SC

3 réponses

Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Si tu veux supprimer toutes les données de la table, pourquoi ne pas faire un :
DELETE FROM geolitecitylocation
ou
Truncate geolitecitylocation
?
Messages postés
29885
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
26 octobre 2020
338
Bonsoir,
Je suis d'accord avec Nhenry.
Mais bon.. si tu tiens tout de même à conserver ton script et afficher au fur et à mesure à l'écran... il te faudra utiliser le tampon de sortie.
Et cela se fait avec ob_start() / ob_flush()
http://php.net/manual/fr/function.ob-flush.php

.
Messages postés
153
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
26 décembre 2019

Bonjour,
Comment les utiliser ? Où les placer ?
Cordialement
SC
Messages postés
153
Date d'inscription
dimanche 27 août 2006
Statut
Membre
Dernière intervention
26 décembre 2019

Bonjour,
Merci à NHenry et Jordane pour leur réponse
Le code donné n'était là que pour illustrer le problème
Je vais me pencher sérieusement sur le lien
Cordialement
SC