boucle foreach et requête sql = fuite memoire
Posté : 09 oct. 2014, 15:58
Bonjour à tous,
J'aimerais un peu d'aide pour la réalisation d'un script php qui envoi autant de requête sql que de ligne dans un fichier csv et recommence tant qu'il y a des fichiers...
Avec le code ça sera peut etre plus clair:
Voici le code de la fonction au cas:
J'ai lancé le script (sans modification entre les run) 4x, voici combien de requete exécuté a chaque fois: 205 286 // 200 514 // 192 429 // 211 164
Le fichier fait plus de 600k lignes. J'ai truncate la table et relancé le meme fichier a chaque fois...
Merci d'avance,
Mickael.
J'aimerais un peu d'aide pour la réalisation d'un script php qui envoi autant de requête sql que de ligne dans un fichier csv et recommence tant qu'il y a des fichiers...
Avec le code ça sera peut etre plus clair:
$files = array_diff(scandir($dir_name), array('..', '.'));
if (!empty($files))
{
foreach ($files as $file)
{
if (pathinfo($file, PATHINFO_EXTENSION) == "csv")
{
$fp = fopen($dir_name.$file, 'r');
while (($line = fgetcsv($fp, 0, $delimiter)) !== FALSE)
insert_update(array_map('addslashes', $line), $connect_id);
fclose($fp);
}
}
mysqli_close($connect_id);
}
La boucle ne devrait pas prendre beaucoup de memoire.... Et peut importe le nombre de fois qu'elle se répète (nombre de ligne du CSV), ca ne devrait pas être un souci non plus puisque qu'elle ne stock rien, réutilise constamment les mêmes variables. Si elle fonctionne une fois alors il devrait pouvoir fonctionner 1M de fois, non ?Voici le code de la fonction au cas:
function insert_update($row, $connect_id)
{
$table_name = "xxxxxxxx";
$maxcol = 13;
$my_request = "INSERT INTO $table_name VALUES ('$row[0]'";
$i = 1;
while ($i < $maxcol)
{
if (isset($row[$i]))
$my_request = $my_request.", '$row[$i]'";
else
$my_request = $my_request.", ''";
$i++;
}
$my_request = $my_request.")";
if (mysqli_query($connect_id, $my_request) == FALSE)
{
echo "<p>$my_request</p>";
exit();
}
}
J'espère qu'une personne pourra me dire pourquoi mon script arrête de s'exécuter de maniere "aléatoire"..J'ai lancé le script (sans modification entre les run) 4x, voici combien de requete exécuté a chaque fois: 205 286 // 200 514 // 192 429 // 211 164
Le fichier fait plus de 600k lignes. J'ai truncate la table et relancé le meme fichier a chaque fois...
Merci d'avance,
Mickael.