Délais d'affichage si boucle sur traitement important

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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
1 févr. 2015 à 19:13
Si tu veux supprimer toutes les données de la table, pourquoi ne pas faire un :
DELETE FROM geolitecitylocation
ou
Truncate geolitecitylocation
?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 févr. 2015 à 01:07
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

.
0
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 à 10:05
Bonjour,
Comment les utiliser ? Où les placer ?
Cordialement
SC
0
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 à 08:11
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
0
Rejoignez-nous