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

scn68100 94 Messages postés dimanche 27 août 2006Date d'inscription 28 novembre 2016 Dernière intervention - 1 févr. 2015 à 17:58 - Dernière réponse : scn68100 94 Messages postés dimanche 27 août 2006Date d'inscription 28 novembre 2016 Dernière intervention
- 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
Afficher la suite 

4 réponses

Répondre au sujet
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 22 avril 2018 Dernière intervention - 1 févr. 2015 à 19:13
0
Utile
Si tu veux supprimer toutes les données de la table, pourquoi ne pas faire un :
DELETE FROM geolitecitylocation
ou
Truncate geolitecitylocation
?
Commenter la réponse de NHenry
jordane45 20581 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 2 févr. 2015 à 01:07
0
Utile
1
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

.
scn68100 94 Messages postés dimanche 27 août 2006Date d'inscription 28 novembre 2016 Dernière intervention - 2 févr. 2015 à 10:05
Bonjour,
Comment les utiliser ? Où les placer ?
Cordialement
SC
Commenter la réponse de jordane45
scn68100 94 Messages postés dimanche 27 août 2006Date d'inscription 28 novembre 2016 Dernière intervention - 2 févr. 2015 à 08:11
0
Utile
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
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.