Bonjour à toutes et à tous !

Je suis en train de réaliser mon stage de fin d'étude d'iut info (pour le contexte).

Je dois traiter un très gros csv (70col pour 150 000lig -- 190 000Ko environ) et inserer les champs qui m'interresse dans une BDD sql.
J'ai déjà bidouiller le fichier php.ini pour accepter mon fichier et lui mettre un temps de traitement très long pour une execution.
J'arrive à le faire, cependant, mon programme doit être à des années lumière de l'optimisation et j'arrive à plus de 8h de traitement pour une seule insertion dans une table. Celle-ci me permet de faire des test, après un simple "copier-coller" me permettra de remplir les autres tables.

Je dois supprimer les doublons car sur toutes ces lignes, il y à peut-être 10 "types" différents. Ensuite, je suis obliger de supprimer les champs vides de ma table car, je ne comprend pas pourquoi, dans le tableau que "array_unique" me retransmet, il y à des cases vides lorsqu'il supprime les doublons.

Voici mon code :
Code : 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
<?php
									 //////////////////////////////////////////////////////////////////
									///INSERTION DES DONNEES DU FICHIER CSV DANS LA BASE DE DONNEES///
								   ///SUIVRE LES COMMENTAIRES POUR VOIR CE QUE FAIT CHAQUE SECTION///
								  //////////////////////////////////////////////////////////////////
 
	include('entete.php');
	include('connection.php');
 
									 ////////////////////////////
									///Traitement des données///
								   ////////////////////////////
 
	//Recupere le nom du fichier indiqué par l'utilisateur
	$fichier=$_FILES["userfile"]["name"];
 
	//Affichage des variables de contrôle
	//Pour le codeur seulement, a supprimer pour la version finale
	echo "Nom du fichier =".$fichier;
	echo "<br />Files =".$_FILES["userfile"]["name"];
 
		//Ouverture du fichier en lecture
	if ($fichier)
	{
		//Ouverture du fichier temporaire, en lecture seule
		//--> Attention à la taille, si nécessaire modifier le fichier php.ini (Cf manuel d'utilisation)
		$fp = fopen ($_FILES["userfile"]["tmp_name"], "r");
 
		//Suivi des différentes variables pour le codeur
		//Pour le codeur seulement, a supprimer pour la version finale
		echo "<br />Files n2 =".$_FILES["userfile"]["tmp_name"];
		echo "<br /> fp = ".$fp;
	}
	//Fichier inconnu
	else
	{
?>
		<p align="center" >- Importation échouée -</p>
		<p align="center" ><B>Désolé, mais vous n'avez pas spécifié de chemin valide ...</B></p>
<?php
		exit();
	}
?>
	<p align="center">- Importation Réussie -</p>
 
<?php
									 ////////////////////////////
									///Importation du fichier///
								   ////////////////////////////
 
	$c = 0;
		while (!feof($fp))
		{
			$ligne = fgets($fp,1024);
 
			//Création du tableau des élements séparés par des tabulations
			$liste = explode("	",$ligne);
 
			//Déclaration des tableaux contenant les doublons, déstinés ensuite à être supprimés.
			$TypeDoublons = array(); 
 
			//Boucle permettant de lire colonne par colonne le fichier à partir du fichier produit
			for ($i=0; $i<63; $i++)
			{
				$liste[$i] = (isset($liste[$i])) ? $liste[$i] : Null;
 
				//Permet d'éviter la casse avec les caracteres spéciaux dans le fichier fournis en paramètre
				$search  = array('é','è','É') ;
				$replace = array('e','e','E');
				$liste2[$i] = str_replace($search, $replace, $liste[$i]);
			}
 
			// Stock les valeurs dans un tableau contenant des doublons
			$typeDoublons[$c] = $liste2[27]; 
			// Traite les cas non renseigné en les replaçants par un mot distinct et compréhensible.
			if ($typeDoublons[$c] == '') 
			{
				$typeDoublons[$c] = 'VIDE';
			}
			 // Créer le tableau 'type' à partir de typeDoublons, en supprimant les doublons
			$type = array_unique($typeDoublons);
 
 
									 ///////////////////////////////////////////////////
									///REQUETES D'INSERTIONS DANS LA BASE DE DONNEES///
								   ///-----ATTENTION PREND ENORMEMENT DE TEMPS-----///
								  ///////////////////////////////////////////////////
 
			//TABLE CANDIDAT :
			/*$QueryInsertCandidat = "	INSERT INTO candidat
										VALUES(
										'', 
										'$liste2[3]',
										'$liste2[8]',
										'$liste2[10]',
										'$liste2[23]',
										'$liste2[28]',
										'$liste2[4]',
										'$liste2[5]',
										'$liste2[6]',
										'$liste2[56]',
										'$liste2[2]'
										)";
			$resuCandidat = mysql_query($QueryInsertCandidat) or die (mysql_error()); */
 
			$c++;
		}
 
		//TABLE TYPE
		for($i=1;$i<$c;$i++)
		{
			$queryType = "	INSERT INTO type 
							VALUES(
							'', 
							'$type[$i]'
							)";
			$resuType = mysql_query($queryType) or die (mysql_error());
 
			//Supprime de la base les insertions des caractères vide du aux :
			//'Notice: Undefined offset: 7 in XXX on line 75'
			$delBlancType = "delete from type where nom_type = ' '";
			$resuDelBlancType = mysql_query($delBlancType) or die(mysql_error());
		}
 
									 //////////////////////
									///FIN DES REQUETES///
								   //////////////////////
 
	//Fermeture du fichier
	fclose($fp); 
 
	//Se deconnecter de la base
	mysql_close($co);
?>
<!--Balises de fermeture du document-->
</body>
</html>
A savoir que le fichier m'est fourni à travers un formulaire.
J'ai aussi essayé la fonction load_data_infile, cependant, même si le fichier est bien dans le bon dossier (vérifié avec la génération d'un erreur m'indiquant où est-ce qu'il cherche ce fichier) il me sort un joli : "fichier introuvable".

J'espere vous avoir donné les informations qui peuvent vous aider pour m'éclairer sur la façon d'optimiser mon code.

Je vous remercie du temps que vous pourrez m'accorder et des eventuelles pistes fournies !

Cordialement