Optimisation des performances du code PHP
nguim
Messages postés
18
Statut
Membre
-
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
- Optimisation pc - Accueil - Utilitaires
- Code ascii - Guide
- Test performances pc - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - 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 ;)