le 12/03/2014 à 13:02
Améliorer les performances du script PHP
Bonjour à tous !
J'ai un code qui permet:
Ouvrir un fichier texte ayant la structure suivante:
23733000227
23733000228
23733000229
23733000230
23733000231
23733000232
**Le fichier a plus de 20 000 lignes**
1- )
je dois prendre chacun de ces nombres et comparer ses 7 derniers chiffres avec les 7
derniers chiffres de chacun des nombres de la première colonne (IMSI) de la table de ma
Base de données MySQL ci-dessous:
--(IMSI)----------------------(MDN)
624030743830000 23733013285
624030743830001 23733013286
624030743830002 23733013287
624030743830004 23733013288
624030743830005 23733013289
624030743830006 23733013290
**Ma table a 500 000 Lignes**
2- )
S'il y'a 1 ( il est unique s'il existe), il le récupère (IMSI) et récupère aussi le nombre qui se
trouve sur la même ligne (MDN) à deuxième colonne et affiche les trois:
- Nombre de départ
- IMSI trouvé semblable ( nombre de la colonne IMSI donc les 7 derniers chiffres sont
semblables aux 7 derniers chiffres du nombre contenu dans le fichier texte)
- MDN (nombre de la colonne MDN) de la même ligne que l'IMSI trouvé semblable au
nombre de départ.
Mon code fonctionne, il fait le travail attendu. Mais le temps d'exécution est extrêmement long **plus de 30 minutes**.
Voici mon script:
S'il vous plait aidez moi à optimiser mon script pour réduire ce temps d'exécution.
Ou bien montrez moi une autre méthode plus performante pour faire le même travail.
Merci d'avance.
J'ai un code qui permet:
Ouvrir un fichier texte ayant la structure suivante:
23733000227
23733000228
23733000229
23733000230
23733000231
23733000232
**Le fichier a plus de 20 000 lignes**
1- )
je dois prendre chacun de ces nombres et comparer ses 7 derniers chiffres avec les 7
derniers chiffres de chacun des nombres de la première colonne (IMSI) de la table de ma
Base de données MySQL ci-dessous:
--(IMSI)----------------------(MDN)
624030743830000 23733013285
624030743830001 23733013286
624030743830002 23733013287
624030743830004 23733013288
624030743830005 23733013289
624030743830006 23733013290
**Ma table a 500 000 Lignes**
2- )
S'il y'a 1 ( il est unique s'il existe), il le récupère (IMSI) et récupère aussi le nombre qui se
trouve sur la même ligne (MDN) à deuxième colonne et affiche les trois:
- Nombre de départ
- IMSI trouvé semblable ( nombre de la colonne IMSI donc les 7 derniers chiffres sont
semblables aux 7 derniers chiffres du nombre contenu dans le fichier texte)
- MDN (nombre de la colonne MDN) de la même ligne que l'IMSI trouvé semblable au
nombre de départ.
Mon code fonctionne, il fait le travail attendu. Mais le temps d'exécution est extrêmement long **plus de 30 minutes**.
Voici mon script:
<?php
<?php
set_time_limit(0);
//Connexion à la BD
mysql_connect('localhost','root','');
mysql_select_db('gestnum');
//On ouvre le fichier en question (en lecture seule)
$handle = fopen("fichiernum.txt", "r");
$i=0;
echo '<table align=" justify" border = 2 valign = middle>';
//on parcours tout le fichier (en faisant croire qu'il s'agit d'un csv pour faciliter le traitement)
while ($data = fgetcsv($handle, 10000, ","))
{
//on ne récupère que les 7 derniers caractères de chaque ligne avec la fonction substr
$rest = substr($data[0],-7);
//On établie une requéte qui ne remonte que les MDN finissant par les 7 derniers chiffre de notre $rest. Un seul résultat remonte donc...
$sql = mysql_query('SELECT * FROM `coordab` WHERE `IMSI` LIKE "%'.$rest.'"');
$result =mysql_fetch_array($sql);
$i++;
//on affiche les résultats demandés
echo '<tr>';
echo '<th>'.$i.'</span>'.'</th>';
echo '<th>'.$data[0].'</th>';
echo '<th>'.$result['IMSI'].'</th>';
echo '<th>'.$result['MDN'].'</th>';
echo '</tr>';
}
echo '</table>';
//On ferme le fichier
fclose($handle);
echo'</div>';
?>
php ?>
S'il vous plait aidez moi à optimiser mon script pour réduire ce temps d'exécution.
Ou bien montrez moi une autre méthode plus performante pour faire le même travail.
Merci d'avance.