Et tu boucles dessus en incrémentant le paramètre "debut"...insert.php?debut=0&pas=10
Code : Tout sélectionner
$fic = fopen('upload/temp.csv', "a+");
$ligne = 1;
$tableau = array();
//On crée un tableau avec toutes les valeurs du fichiers
while($data=fgetcsv($fic,1024,';'))
{
$tableau[$ligne] = array($data[0],$data[1],$data[2],$data[3],$data[4]);
$num = count($data);
echo $ligne;
$ligne++;
}
<?php
// partie du traitement serveur de l'enregistrement
if(isset($_GET['debut'])){
$nb_total = 200;
$debut = (int)$_GET['debut'];
$pourcentage = ($debut*100)/$nb_total;
//traitement
sleep(1);
if($debut >= $nb_total){
echo 'end';
}
else {
echo $pourcentage;
}
exit();
}
?><!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Test progression</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
var pas = 10;
function launchImport(){
importData(0);
}
function importData(debut){
$.ajax({
type: "GET",
url: "test_progression.php",
data: "debut="+debut,
success: function(msg){
if(msg!='end'){
$('#infos').html(msg+'%');
importData(parseInt(debut)+parseInt(pas));
}
else {
$('#infos').html('100%');
}
}
});
}
</script>
</head>
<body>
<p>
<a href="#" onclick="launchImport()">Lancer l'import</a>
</p>
<p id="infos">
</p>
</body>
</html>
Attention, c'est un processus assez coûteux, puisqu'il y a des requêtes ajax pour chaque traitement par lot!
ini_set('output_buffering', false);
ob_get_flush();
for($i = 0; $i < 10; ++$i)
{
echo $i, "\n";
flush();
sleep(1);
}
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Test progression</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript">
// on défini le pas, i.e le nombre d'enregistrement que l'on souhaite traiter en même temps
var pas = 10;
// une simple fonction pour appeler la première fois le traitement en ajax
function launchImport(){
// on appel le premier traitement ajax, il va traiter les enregistrement de 0 à "pas" (10 ici)
importData(0,pas);
}
// fonction qui envoie une requête ajax au script d'import, en précisant le début souhaité pour l'import
function importData(debut,pas){
$.ajax({
type: "GET",
// le traitement se fait dans le fichier php traitement.php
url: "traitement.php",
// on lui passe comme argument le debut et le pas
data: "debut="+debut+"&pas="+pas,
// on traite les retours de l'appel ajax
success: function(msg){
// si on est pas à la fin, on affiche le pourcentage que nous a envoyé le script traitement.php
if(msg!='end'){
$('#infos').html(msg+'%');
// et on relance le traitement pour le "portion" suivante
importData(parseInt(debut)+parseInt(pas),pas);
}
// sinon on indique que c'est terminé
else {
$('#infos').html('100%');
}
}
});
}
</script>
</head>
<body>
<p>
<a href="#" onclick="launchImport()">Lancer l'import</a>
</p>
<p id="infos">
</p>
</body>
</html>
Ensuite le fichier traitement.php:<?php
// partie du traitement serveur de l'enregistrement
if(isset($_GET['debut'])){
// on récupère le nombre d'enregistrement total
$nb_total = 200;
// on récupère le paramètre début
$debut = (int)$_GET['debut'];
// on calcul le pourcentage
$pourcentage = ($debut*100)/$nb_total;
//traitement
// ici tu faits tes requêtes, tes traitements de fichier, etc...
sleep(1);
// si on a encore des enregistrement à faire, on envoi simplement le pourcentage effectué
if($debut >= $nb_total){
echo 'end';
}
// sinon on renvoi le signal de fin
else {
echo $pourcentage;
}
}
C'est mieux comme ça?
En fait on construit les paramètres de l'url...data: "debut="+debut+"&pas="+pas,
tu verras ce que ça donne...
Code : Tout sélectionner
function launchMessage()
{
var show = document.getElementById("zone").style ;
show.display = show.display == 'none' ? "block" : "block";
}<script type="text/javascript" src="../js/prototype.js"></script>
<script type="text/javascript" src="../js/ajax_funcs.js"></script>
<div id="zone" style="display:none">
<br />
<strong>Veuillez patienter, le traitement peut prendre plusieurs minutes</strong>
<br /><br />
<center><IMG SRC="../images/indicator.gif"></center>
<br />
</div>
Pour indicator.gif je vous laisse chercher ça sur google, il y en a plein (attention à en prendre un non-propriétaire).