limace2000

Inscris le 19/08/2009 à 10:18
  • Signature
    la limace
  • Site web
  • Nombre de sujets
    1
  • Nombre de messages
    2
  • 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
limace2000
Bonjour

Je suis nouveau sur ce forum et j'éspére que vous allez pouvoir m'aider !!!!

J'utilise en local un script de lecture d'un fichier texte pour l'incorporer dans une base mysql.

Je lis donc mon fichier texte en cherchant les noms de colonnes et les données (séparé par des :) et je recherche également les "@" qui séparents mes nouvelles lignes dans mon tableau. C'est clair ?

Voici un extrait de mon fichier (qui fait 40 000 lignes):
$FILE:
DAC_Clic_Phase1: 0
$FILE:
OriginalModTime: 03/10/2006 09:47:44
DAC_UNID: 6AF1EDDAF236F98BC1257102005982D5
DAC_Sce: 172
DAC_Quant: 2
DAC_Serie: Unitaire
DAC_Code_Site: F04
$Revisions: 26/01/2006 17:28:01,26/01/2006

@
$FILE:
DAC_Clic_Phase1: 0
$FILE:
OriginalModTime: 05/03/2009 16:46:44
DAC_UNID: 046674D672CE4EB5C12571020047B2A5
PH1_Visibilite: Non
$Revisions: 26/01/2006 14:07:06,26/01/2006 14:07:07,26/01/2006
voir data


@
$FILE:
DAC_Clic_Phase1: 0
OriginalModTime: 27/11/2006 18:14:49
DAC_UNID: 39DB170F75E269CFC125710100511222
DAC_Sce: 015


Et voici mon code PHP:
<?php
set_time_limit (60000000000000);
$handle = fopen('file.txt', 'r');

if ($handle) {

$link = mysql_connect('localhost', '***', '***') or die('Impossible de se connecter : ' . mysql_error());
mysql_select_db('***') or die('Impossible de sélectionner la base de données');
mysql_query("LOCK TABLES *** WRITE");

$id=1;

//insertion du 1er enregistrement
$sql = "INSERT INTO `***` (`id`) VALUES ('$id')";
$requete = mysql_query ($sql);


while (!feof($handle)) {
$buffer = fgets($handle, 4096);

if (substr($buffer,0,1) =="@"){
// Si c'est une nouvelle ligne
$drapeau=0;
$id++;
$sql = "INSERT INTO `***` (`id`) VALUES ('$id')";
$requete = mysql_query ($sql);
}
else
{
//extraction des données
$entete = trim(substr($buffer,0,strpos($buffer, ":")));
$corps = trim(substr($buffer,strpos($buffer, ":")+1));

if ($entete == "$Revisions")$drapeau=1;
if ($drapeau == 1){
$entete="$Revisions";
$corps=$buffer;
}

// Traitement des lignes sans intitulé de colonnes

if ($entete==''){
$entete=$entete_old;
$corps=$corps_old.$corps;
}

$entete_old=$entete;
$corps_old=$corps;

if ($corps<>"" or $corps<>" " ){
// Connexion au serveur mysql
$sql = "UPDATE `***` SET $entete='$corps' where id=$id";
$requete = mysql_query ($sql);
if (!$requete) {
// Si l'insertion n'a pas marché ca veux dire que la colonne n'existe pas. On la cré et on relance la requete
$sql = "ALTER TABLE `***` ADD `$entete` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL";
$requete = mysql_query ($sql);
$sql = "UPDATE *** SET `$entete`='$corps' where id=$id";
$requete = mysql_query ($sql);
}
}
}
mysql_query("UNLOCK TABLES");
}
fclose($handle);
}
?>


Ma probléme et que ce script marche rapidement au début mais peu a peu ca ralentie enormémént !!!!

D'où viens ce ralentissement ???
la limace

Ses derniers messages sur les forums

forum
limace2000
Bonjour

Merci pour les conseils.
- Pour les champs de type TEXT : Oui j'avais mis ca au début ne connaissant pas trop le type de données qui allé tomber mais maintenant je peux ajuster ...

- Pour la faille de sécurité c'est pas bien grave puisque je travail en locale.

- Les tables de vérité, et l'algèbre booléenne : Oui je connais, j'ai fais de l'électronique et je vois bien que ça pourrai me servir mais j'ai du mal a voir où et comment !!!!

Je viens de télécharger VIM :-)
J'applique les modifs et je vous tiens informé
Merci
la limace
limace2000
Bonjour

Je suis nouveau sur ce forum et j'éspére que vous allez pouvoir m'aider !!!!

J'utilise en local un script de lecture d'un fichier texte pour l'incorporer dans une base mysql.

Je lis donc mon fichier texte en cherchant les noms de colonnes et les données (séparé par des :) et je recherche également les "@" qui séparents mes nouvelles lignes dans mon tableau. C'est clair ?

Voici un extrait de mon fichier (qui fait 40 000 lignes):
$FILE:
DAC_Clic_Phase1: 0
$FILE:
OriginalModTime: 03/10/2006 09:47:44
DAC_UNID: 6AF1EDDAF236F98BC1257102005982D5
DAC_Sce: 172
DAC_Quant: 2
DAC_Serie: Unitaire
DAC_Code_Site: F04
$Revisions: 26/01/2006 17:28:01,26/01/2006

@
$FILE:
DAC_Clic_Phase1: 0
$FILE:
OriginalModTime: 05/03/2009 16:46:44
DAC_UNID: 046674D672CE4EB5C12571020047B2A5
PH1_Visibilite: Non
$Revisions: 26/01/2006 14:07:06,26/01/2006 14:07:07,26/01/2006
voir data


@
$FILE:
DAC_Clic_Phase1: 0
OriginalModTime: 27/11/2006 18:14:49
DAC_UNID: 39DB170F75E269CFC125710100511222
DAC_Sce: 015


Et voici mon code PHP:
<?php
set_time_limit (60000000000000);
$handle = fopen('file.txt', 'r');

if ($handle) {

$link = mysql_connect('localhost', '***', '***') or die('Impossible de se connecter : ' . mysql_error());
mysql_select_db('***') or die('Impossible de sélectionner la base de données');
mysql_query("LOCK TABLES *** WRITE");

$id=1;

//insertion du 1er enregistrement
$sql = "INSERT INTO `***` (`id`) VALUES ('$id')";
$requete = mysql_query ($sql);


while (!feof($handle)) {
$buffer = fgets($handle, 4096);

if (substr($buffer,0,1) =="@"){
// Si c'est une nouvelle ligne
$drapeau=0;
$id++;
$sql = "INSERT INTO `***` (`id`) VALUES ('$id')";
$requete = mysql_query ($sql);
}
else
{
//extraction des données
$entete = trim(substr($buffer,0,strpos($buffer, ":")));
$corps = trim(substr($buffer,strpos($buffer, ":")+1));

if ($entete == "$Revisions")$drapeau=1;
if ($drapeau == 1){
$entete="$Revisions";
$corps=$buffer;
}

// Traitement des lignes sans intitulé de colonnes

if ($entete==''){
$entete=$entete_old;
$corps=$corps_old.$corps;
}

$entete_old=$entete;
$corps_old=$corps;

if ($corps<>"" or $corps<>" " ){
// Connexion au serveur mysql
$sql = "UPDATE `***` SET $entete='$corps' where id=$id";
$requete = mysql_query ($sql);
if (!$requete) {
// Si l'insertion n'a pas marché ca veux dire que la colonne n'existe pas. On la cré et on relance la requete
$sql = "ALTER TABLE `***` ADD `$entete` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL";
$requete = mysql_query ($sql);
$sql = "UPDATE *** SET `$entete`='$corps' where id=$id";
$requete = mysql_query ($sql);
}
}
}
mysql_query("UNLOCK TABLES");
}
fclose($handle);
}
?>


Ma probléme et que ce script marche rapidement au début mais peu a peu ca ralentie enormémént !!!!

D'où viens ce ralentissement ???
la limace

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