nguim

Inscris le 25/02/2014 à 13:38
  • Nombre de sujets
    3
  • Nombre de messages
    5
  • Nombre de commentaires
    Aucun
  • Nombre de news
    Aucune
  • Niveau en PHP
    Débutant

Ses dernières news

Aucune news

Ses derniers sujets sur les forums

forum
nguim
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:

<?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.
nguim
Bonsoir à tous !
J'ai écrit un petit code pour vérifier que toutes les lignes de mon fichier texte sont des entiers.
Et s'il existe une ligne qui contient un caractère alphabétique, il me redirige vers une autre page et affiche un message d'erreur.
Mais lorsque j'exécute le code, il me redirige toujours vers cette page, même si toutes les lignes sont des entiers.
Lorsqu'il y'a un caractère alphabétique, il affiche le message d'erreur avec la ligne correspondante.
Mais lorsqu'il n'y a pas de caractère alphabétique dans le fichier, il me redirige toujours vers cette page prévue et affiche toujours le message d'erreur et ne met aucune ligne correspondante.
Voici mon code:
<?php <?php

set_time_limit(0);
error_reporting(E_ALL ^ E_NOTICE);

mysql_connect('localhost','root','');
mysql_select_db('gestnum');


//on mesure la longueur des différentes lignes du fichier

$handle = fopen("fichiernumcr.txt", "r");
$i=0;

while (($taille = fgetcsv($handle, 0, "\n")) !== FALSE)
{
$i++;
$nul = strlen($taille[0]);


// On verifie que le fichier ne contient que des entiers

if (ctype_digit($taille[0]))
{
//$entier=1;
//$ligne=$i;
//echo 'La chaîne '. $entier .' est bien un entier<br/>';
}
else
{
$entier1=0;
$ligne=$i;
}

}


//Erreur fichier quand il contient des lettres

if($entier1 ==0)
{
header('Location: ../gestionnaire-mdn/gerer-les-mdn-a-creer.php?er3=fstr1');

}


?>

php ?>


Je ne comprends plus rien.
S'il vous plait aidez moi.
Merci d'avance.
nguim
Bonsoir à tous !

Je suis nouveau dans le Forum.

Je suis débutant en PHP, et j'ai écrit un petit code pour pouvoir mettre à jour les données de ma BDD.
En fait ces informations sont contenues dans un fichier texte (de nom fichab.txt), la première colonne du fichier texte correspond à l'IMSI et la seconde colonne correspond à MEID. Et le but est de:

Pour chaque IMSI du fichier texte (même IMSI qui se trouve dans la BDD) remplacer son MED de la BDD par celui qui est contenu dans le ficher texte. Bref l'IMSI et MEID se trouvent dans une même table de la BDD et c'est la colonne MEID que l'on veut modifier.

Voici la structure de mon fichier texte.

(------IMSI---------------MEID)
624030743830000 1100001D7DEE6D
624030743830001 CC00001D7DEE6E
624030743830002 3100001D7DEE6F
624030743830003 4100001D7DEE70
624030743830004 CC00001D7DEE71


Voici mon script:


<?php 
<?php
set_time_limit(0);
error_reporting(E_ALL ^ E_NOTICE);
mysql_connect('localhost','root','');
mysql_select_db('gestnum');
/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)
//$i = 0;
while (($data = fgetcsv($handle, 0, " ")) !== FALSE) {
$queryBase = 'UPDATE coordab SET MEID="'.$data[1].'", WHERE IMSI="'.$data[0].'"';
mysql_query($queryBase);
}
//on ferme le fichier
fclose($handle);
?> php ?>


Lorsque je l'exécute, il fait la mise à jour mais en prenant beaucoup de temps (plus de 20 minutes) le fichier contient 9999 lignes.

Je voudrais que vous m'aidiez à optimiser mon code pour pouvoir réduire le temps d'exécution de ce script.

Voici la structure de ma table coordab:
<?php -- phpMyAdmin SQL Dump
-- version 4.0.4
-- http://www.phpmyadmin.net
--
-- Client: localhost
-- Généré le: Mer 26 Février 2014 à 07:33
-- Version du serveur: 5.6.12-log
-- Version de PHP: 5.4.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: `gestnum`
--
CREATE DATABASE IF NOT EXISTS `gestnum` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `gestnum`;

-- --------------------------------------------------------

--
-- Structure de la table `coordab`
--

CREATE TABLE IF NOT EXISTS `coordab` (
`ida` int(60) NOT NULL AUTO_INCREMENT,
`IMSI` varchar(255) NOT NULL,
`MEID` varchar(255) NOT NULL,
`ESN1` varchar(255) NOT NULL,
`PUK1` varchar(255) NOT NULL,
`AKY` varchar(255) NOT NULL,
`MDN` varchar(255) NOT NULL,
PRIMARY KEY (`ida`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Contenu de la table `coordab`
--

INSERT INTO `coordab` (`ida`, `IMSI`, `MEID`, `ESN1`, `PUK1`, `AKY`, `MDN`) VALUES
(1, '624030743830000', 'A100001D7DEE6D', '80E5FA73', '37312379', '0E47EA7A6F444640', '33830000'),
(2, '624030743830001', 'A100001D7DEE6E', '80AE089F', '91944192', 'F9052B04E3969977', '33830001'),
(3, '624030743830002', 'A100001D7DEE6F', '809A1A9F', '29861661', '4617481A74D864B5', '33830002'),
(4, '624030743830003', 'A100001D7DEE70', '80E68950', '20303707', '1C45F0418B552C45', '33830003'),
(5, '624030743830004', 'A100001D7DEE71', '80C275C6', '70591541', 'EA26D0523114FFF2', '33830004');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
php ?>


Aidez moi s'il vous plait.

Merci d'avance.

Ses derniers messages sur les forums

forum
nguim
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:

<?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.
nguim
Merci pour votre aide.
Je me rejoissais déjà après avoir vu votre code mais je de le tester et il me redirige toujours pour rien,
S'il vous plait regarder encore car le problème reste.

Ses derniers commentaires de news

Aucun commentaire de news

Ses derniers commentaires de sites

Aucun commentaire de sites

Ses derniers commentaires de wall

Aucun commentaire wall
LoadingChargement en cours