Bonjour,
J'ai créé un script permettant d'envoyer le contenu d'un fichier CSV dans ma base de données, mais celui ci s'avère extrêmement long dés lors que l'on veut envoyer un nombre conséquent de ligne (> 10000).

Existe t-il un moyen d'optimiser mon script afin qu'il soit plus efficace / rapide ?

Mon script d'envoi de fichier
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
<form method="POST" action="import_csv.php" enctype="multipart/form-data"> 
 
 
 
 
	<!-- On limite le fichier à 1Go -->
 
	<input type="hidden" name="MAX_FILE_SIZE" value="1000000000">
	<br/>
	<div class="form-group">
		 <center><p><h4>Variante de Selection OPUS : SOAP_PRSP  </h4></p></center><br/>
		<center><p><h4>Coller le resultat dans une fichier Excel vierge en cellule A1 puis enregistrer ce fichier au format *.csv (séparateur point virgule)</h4></p></center>
		<center><p><img src="img/screenexcel.jpg" alt="Excel"></p></center><br/>
		<center><p><h4>Sélectionner fichier CSV : </h4></p></center>
		<label class="col-md-4 control-label" for="csv"></label>
		<div class="col-md-4">
		<input id="csv" name="csv" class="input-file" type="file">
		</div>
	</div>
 
	<br/><br/>
	<center><input type="submit" name="envoyer" value="Envoyer le fichier"></center>
	</form>

le script de traitement :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
 
<?php
	include("connect_bdd.php");
 
	if(isset($_FILES['csv']))
	{ 			
		$dossier = 'upload/';
		$fichier = basename($_FILES['csv']['name']);
 
		$result = move_uploaded_file($_FILES['csv']['tmp_name'], $dossier . $fichier);
 
		if($result) //Si la fonction renvoie TRUE, c'est que la a fonctionne
		{	
 
			echo "Upload du fichier effectué avec succès !<br>";
 
			$sql = "UPDATE membres SET import_date = NOW() WHERE identifiant = '".$identifiant."'  ";
 
			mysqli_query($mysqli,$sql); //execution de la requete SQL:
 
				// VARIABLES DE BASE
 
				$sql = "DELETE FROM test_fichier_se where cuid='".$identifiant."'"; // fonction permettant de supprimer une partie d'une table	
 
				mysqli_query($mysqli,$sql);
 
				if(mysqli_query($mysqli,$sql))
					// SUCCES
					{ echo "La table ".$table_a_vider." a bien été vidée !<br>"; }	 
				else
					// ECHEC
					{echo "La table ".$table_a_vider." n'a pas été vidée de son contenu.<br>" ;}
					// }
 
		}
				else //Sinon (la fonction renvoie FALSE).
					{
						echo "Echec de l'upload ! Choisir un ficher.CSV et selectionner un UPR ";
					}
 
 
				echo "Resultat Import SQL : <br>";
 
				//Le chemin d'acces a ton fichier sur le serveur
				$fichier = fopen("upload/".$_FILES['csv']['name'], "r");
				$compteur1 =0;
 
				//tant qu'on est pas a la fin du fichier :
 
				while (!feof($fichier))
				// while ($compteur1<10)
				{
					// On recupere toute la ligne
					$uneLigne = addslashes(fgets($fichier));
					//On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';')
					$tableauValeurs = explode(';', $uneLigne);
 
					// On crée la requete pour inserer les donner
 
					//Initialisation des variables
					$statu_sa = $tableauValeurs[6];
					$rdv = $tableauValeurs[9];
						$fin_reelle = $tableauValeurs[10];			
						$date_lanc = $tableauValeurs[11];
							$date_sais_dem_opus = $tableauValeurs[12];
							$date_cont = $tableauValeurs[13];
								$numero_act = $tableauValeurs[4];
 
					//Traitement colonne Statut syst. activité
 
					if($statu_sa == '') {
 
					$statu_sa = 'Vide';
					}
 
					//Traitement colonne Date de RDV
					if($rdv == '') {
 
					$rdv = 'Vide';
					}
 
					//Traitement colonne Date fin réelle
					if($fin_reelle == '') {
 
					$fin_reelle = 'Vide';
					}
 
					//Traitement colonne Date de lancement
					if($date_lanc == '') {
 
					$date_lanc = 'Vide';
					}
 
					//Traitement colonne Date saisie demande OPUS
					if($date_sais_dem_opus == '') {
 
					$date_sais_dem_opus = 'Vide';
					}
 
					//Traitement colonne Date contractuelle
					if($date_cont == '') {
 
					$date_cont = 'Vide';
					}
 
					$numero_act2 = '';
 
					// Traitement colonne Statut
 
					$statut_final = '';
 
					$query="INSERT INTO test_fichier_se SET m_pres_tech='$tableauValeurs[0]' , ar_opus='$tableauValeurs[1]' ,rol ='$tableauValeurs[2]' ,ros ='$tableauValeurs[3]',num_act='$tableauValeurs[4]' , Lib_act='$tableauValeurs[5]' , statu_sa='$statu_sa' , statut_a='$tableauValeurs[7]' , com_act='$tableauValeurs[8]' , rdv='$rdv' , fin_reelle='$fin_reelle' , date_lanc='$date_lanc' , date_sais_dem_opus='$date_sais_dem_opus' , date_cont='$date_cont' , cp_exta='$tableauValeurs[14]' , com_exta='$tableauValeurs[14]' , activite='$numero_act2' , statut='$statut_final', cuid='".$identifiant."'";
 
					$nblignes = mysqli_num_rows($query);
 
						$compteur1 = $compteur1 + 1;						
 
					$req=mysqli_query($mysqli,$query);
					// la ligne est finie donc on passe a la ligne suivante (boucle)
					$compteur1 = $compteur1 + 1;
					// echo "$compteur1,"; 
				}
 
 
				//vérification et envoi d'une réponse à l'utilisateur
				if ($req)
				{
					echo "<h2>Ajout dans la base de données effectué avec succès</h2>";
					echo "".$compteur1." Lignes ajoutées";
 
					//requete maj du flag_import
					$sql_flag="UPDATE membres SET flag_import=1 WHERE identifiant = '".$identifiant."' ";
					$sql_flag=mysqli_query($mysqli, $sql_flag);
 
 
 
					?> </br></br> <?php
 
				} else {
					?> </br></br> <?php
					echo "  Echec dans l'ajout à la base de données".mysqli_errno($query);
 
					?> </br></br> <?php
				}
				fclose($fichier);
	}
?>

Merci d'avance de votre aide !
Steven