Optimisation des performances du code PHP
nguim
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
Super_carotte Messages postés 1420 Date d'inscription Statut Membre Dernière intervention -
Super_carotte Messages postés 1420 Date d'inscription Statut Membre Dernière intervention -
Salut à tous !
J'ai mon code qui me permet de charger ma BDD MySQL à partir d'un fichier texte.
Mon fichier texte a 9999 lignes et le temps d'exécution du script est très élevé ( plus de 25 minutes).
S'il vous plait aidez moi à optimiser ce script ou montrer une autre méthode pour la même tâche et avec un temps d'exécution réduit.
Voici mon code:
Merci d'avance !
J'ai mon code qui me permet de charger ma BDD MySQL à partir d'un fichier texte.
Mon fichier texte a 9999 lignes et le temps d'exécution du script est très élevé ( plus de 25 minutes).
S'il vous plait aidez moi à optimiser ce script ou montrer une autre méthode pour la même tâche et avec un temps d'exécution réduit.
Voici mon code:
<?php set_time_limit(0); error_reporting(E_ALL ^ E_NOTICE); mysql_connect('localhost','root',''); mysql_select_db('gestnum'); //on vide la table coordab avant mysql_query("TRUNCATE TABLE coordab"); //On ouvre le fichier en question (en lecture seule) $handle = fopen("fichab.txt", "r"); //on parcours tout le fichier (en faisant croire qu'il s'agit d'un csv pour faciliter le traitement) while ($data = fgetcsv($handle, 10000, " ")) { mysql_query("INSERT INTO coordab (IMSI, MEID, ESN1, PUK1, AKY, MDN) VALUES ('".$data[0]."','".$data[1]."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."')"); } //On ferme le fichier fclose($handle); header('Location: alimenter-la-bd.php?info=charger'); ?>
Merci d'avance !
A voir également:
- Optimisation des performances du code PHP
- Code ascii - Guide
- Optimisation pc - Accueil - Utilitaires
- Tester les performances de son pc - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
1 réponse
Bonjour,
déja 9999 lignes en 25 minutes, c'est anormal!
On peut charger 10.000 lignes en quelques secondes....
Pour commencer, si votre fichier texte fait moins de 2 Mo (4 à 5 sur certains serveurs), faites simplement:
comme ça, vous avez tout le fichier dans une seule chaîne texte très longue....
Ensuite, votre chaîne, il faut l'exploder (voir explode) en séparant chaque ligne sachant que le séparateur est "\n"
donc $meslignes est un tableau qui contient chaque ligne. Vous faites maintenant un autre explode sur les données si ces données sont séparées par le caractère " " (espace):
Ensuite vous re-construisez la chaîne à insérer en SQL avec implode:
et votre boucle foreach devient:
et enfin l'insertion de données:
et ça devriat déja aller nettement plus vite!
A+
public function meilleurProgrammeurDuMonde() { return "MOI"; } // humour
déja 9999 lignes en 25 minutes, c'est anormal!
On peut charger 10.000 lignes en quelques secondes....
Pour commencer, si votre fichier texte fait moins de 2 Mo (4 à 5 sur certains serveurs), faites simplement:
$montexte = file_get_contents("fichab.txt");
comme ça, vous avez tout le fichier dans une seule chaîne texte très longue....
Ensuite, votre chaîne, il faut l'exploder (voir explode) en séparant chaque ligne sachant que le séparateur est "\n"
$mesLignes = explode("\n", $montexte);
donc $meslignes est un tableau qui contient chaque ligne. Vous faites maintenant un autre explode sur les données si ces données sont séparées par le caractère " " (espace):
foreach($meslignes AS $ligne) { $mesdonnes = explode(" ", $ligne); ....ici la suite... }
Ensuite vous re-construisez la chaîne à insérer en SQL avec implode:
$monSql = '"'.implode('","', $ligne).'"';
et votre boucle foreach devient:
foreach($meslignes AS $ligne) { $mesdonnes = explode(" ", $ligne); $monSql = '"'.implode('","', $mesdonnes ).'"'; ....ici la suite... }
et enfin l'insertion de données:
foreach($meslignes AS $ligne) { $mesdonnes = explode(" ", $ligne); $monSql = '"'.implode('","', $mesdonnes).'"'; mysql_query("INSERT INTO coordab (IMSI, MEID, ESN1, PUK1, AKY, MDN) VALUES $monSql); }
et ça devriat déja aller nettement plus vite!
A+
public function meilleurProgrammeurDuMonde() { return "MOI"; } // humour
Super_carotte
Messages postés
1420
Date d'inscription
Statut
Membre
Dernière intervention
127
what else? tu fais même le café mpmp93 ;)