Traitement de gros fichier CSV
Bonjour,
je ne suis pas sûr d'être au bon endroit, car je ne sais pas si PHP est bien adapté a ce que je veux faire.
Le principe est simple, insérer le contenu d'un fichier CSV dans une base de donnée. Mon script fonctionne très bien pour des fichiers inférieur à 1Mo. mais le problème et que je dois traiter un fichier de 100Mo.
J'ai poussé la limite de temps de PHP à 1h, mais au bout de ce temps, je n'ai parcouru que 6% de mon fichier. :aie:
Ma question est donc : comment optimser tout ca ? est-ce qu'il faut que j'utilise un autre langage.. si oui, lequel ? :yaisse2:
Voici mon code:
Code:
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
|
$sSqlInsert="";
$sNomTable="matable";
//vide la table
$sSql="DELETE FROM ".$sNomTable."";
mysql_query($sSql);
$fpHandle = fopen($sNomFichier, "r");
while (($aData = fgetcsv($fpHandle, 1000, ";")) !== false) {
$nNbVal = count($aData);
if($aData[($nNbVal-1)]==""){
array_pop($aData);
$nNbVal = count($aData);
}
//insertion d'une nouvelle ligne
$sSqlInsert.="INSERT into ".$sNomTable." VALUES('','".date("Y-m-d H:i:s")."','".date("Y-m-d H:i:s")."'";
for ($i=0; $i < $nNbVal; $i++) {
$sSqlInsert.= ",'".addslashes($aData[$i])."'";
}
$sSqlInsert.=");";
}
mysql_query($sSqlInsert);
fclose($fpHandle); |