IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

probleme mémoire avec mysql


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut probleme mémoire avec mysql
    Bonjour

    Voici mon fichier php qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    <?php
     
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
     
    set_time_limit(0);
    global $dbr,$id,$OR,$i,$j,$k,$x,$y,$z,$stat,$withdemo,$withoutdemo,$chi,$cr,$a,$b,$cnx,$db,$sql; 
    $a=0;
    $b=0;
    $x=0;
    $y=0;
    $z=0;
     
    $fichier = "hegpAllMeasuresNewChi2.lat.xml";
     
     function fonctionBaliseOuvrante($parseur, $nomBalise,$attribut) {       
            global $dbr,$id,$OR,$i,$j,$k,$x,$y,$z,$stat,$withdemo,$withoutdemo,$chi,$cr,$a,$b;
            $dbr = $nomBalise;
     
            if($dbr=="CONCEPT"){
            $id="";$OR="";$i="";$j="";$k="";$x=0;$y=0;$z=0;$stat="";$withdemo="";$withoutdemo="";$chi="";$cr="";$a=0;$b=0;}
     
          }
     
     
     function fonctionBaliseFermante($parseur, $nomBalise){
          global  $dbr,$id,$OR,$i,$j,$k,$x,$y,$z,$stat,$withdemo,$withoutdemo,$chi,$cr,$a,$b,$cnx,$db,$sql;
     
          if($nomBalise=="CONCEPT_REF"){     
          $a=$a+1;}
     
          if($nomBalise=="OBJECT_REF"){
          $b=$b+1;}
     
          if($nomBalise=="CONCEPT"){
            $cnx = mysql_connect( "localhost", "root", "" ) ;
            $db = mysql_select_db("greg");
     
            $sql="INSERT INTO concepts (id, nbextension, extension, nbintei, intei, nbintmed, intmed, nbintdemo, intdemo, nbflatintei, flatintei, nbflatintmed, flatintmed, nbflatintdemo, flatintdemo, nbcover,cover, prrdemo, prrssdemo, chi, stab, type, comment, valid, xml) VALUES ('$id','$b','$OR','$z','$i','$y','$j','$x','$k','','','','','','','$a','$cr','$withdemo','$withoutdemo','$chi','$stat','','','','')"; 
     
            $sql2="INSERT INTO extension (id,obj) VALUES ('$id','$OR')";
            $sql3="INSERT INTO intdemo (id,att) VALUES ('$id','$k')";
            $sql4="INSERT INTO intei (id,att) VALUES ('$id','$i')";
            $sql5="INSERT INTO intmed (id,att) VALUES ('$id','$j')";
            $sql6="INSERT INTO upcover (id,upcover) VALUES ('$id','$cr')";
     
            $requete = mysql_query( $sql, $cnx ) or die( mysql_error() ) ;
            $requete1 = mysql_query( $sql2, $cnx ) or die( mysql_error() ) ;
            $requete2 = mysql_query( $sql3, $cnx ) or die( mysql_error() ) ;
            $requete3 = mysql_query( $sql4, $cnx ) or die( mysql_error() ) ;
            $requete4 = mysql_query( $sql5, $cnx ) or die( mysql_error() ) ;
            $requete5 = mysql_query( $sql6, $cnx ) or die( mysql_error() ) ;
     
            mysql_close($cnx); }
     
     
     
          $dbr= ""; 
                                            }
     
     
     
    function fonctionTexte($parseur, $text){
            global $dbr,$id,$OR,$i,$j,$k,$x,$y,$z,$stat,$withdemo,$withoutdemo,$chi,$cr;
     
           if($dbr=="ID"){$id=$text;}
           if($dbr=="OBJECT_REF"){$OR=$text." ".$OR;}
           if (substr($text, 0, 2)=="1-"){
           $i=$text." ".$i;
           $i=addslashes($i);
           $z=$z+1;}
           if (substr($text, 0, 2)=="2-"){
           $j=$text." ".$j;
           $j=addslashes($j);
           $y=$y+1;}
           if (substr($text, 0, 2)=="3-"){
           $k=$text." ".$k;
           $k=addslashes($k);
           $x=$x+1;}
           if($dbr=="STABILITY"){$stat=$text;}
           if($dbr=="PRRWITHDEMO"){$withdemo=$text;}
           if($dbr=="PRRWITHOUTDEMO"){$withoutdemo=$text;}
           if($dbr=="CHI2"){$chi=$text;}
           if($dbr=="CONCEPT_REF"){$cr=$text." ".$cr;}
     
                                           }          
     
        $parseurXML = xml_parser_create();
        xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante", "fonctionBaliseFermante");
        xml_set_character_data_handler($parseurXML, "fonctionTexte");
     
        // Ouverture du fichier
        $fp = fopen($fichier, "r");
        if (!$fp) die("Impossible d'ouvrir le fichier XML");
        while ( $ligneXML =fread($fp,50)){
            xml_parse($parseurXML, $ligneXML, feof($fp)) or die("Erreur XML");
         }
        fclose($fp);
        xml_parser_free($parseurXML);
    echo 'la base est cool';
     
    ?>
    Et mon fichier xml comporte 400 milles lignes.
    Et une fois que je veux remplir ma base il me met ce message :
    Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 268436807 bytes) in E:\EasyPHP5.2.10\www\Treillis2DB\exercice.php on line 70.

    Je ne sais pas comment gagner de la mémoire??
    Pouvez-vous m'aider?
    Merci.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Bonjour,
    De mémoire, je pense que dans le fichier init de php tu dois avoir une option avec la mémoire maximum à alouer. Mais je ne me rappels plus du nom de la variable.
    mais rechercche les variables ayant la valeur mise en limite (cf le message d'erreur ) et tu trouveras alors la bonne variable.

    si tu n'as pas trouvé, je verifierai le parametrage d'un de mes sites mais ce ne sera qu'en soirée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    ok merci.

    Je viens d'essayer de bidouiller le php.ini mais le résultat est toujours le même.
    j'ai changé la valeur de memoty_limit, post_max_size et de upload_max_filesize .
    Mais ça ne fonctionne toujours pas.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 54
    Points : 37
    Points
    37
    Par défaut
    Rebonjour,

    oui c'est bien le memory_limit qu'il faut changer.voici un lien un tutoriel expliquant comment changer ces limites


    Bonne journée.

  5. #5
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    As tu essayé de fractionner ton fichier XML source ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Désolé malvax malgré les bon conseils de cette page, j'ai toujours le message d'erreur.

    Non je n'ai pas essayé de fractionner le fichier xml. Mais je n'extrais que quelques informations qui me font arriver à 13000 insertions dans ma base de données, ce qui est peu. Donc je ne comprends pas ce problème de mémoire.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    j'ai modifié la valeur memory_limit=128MB c'est le plus gros que j'ai mis. Mais rien ne marche. Et la mémoire vive de mon ordinateur est utilisée à 56%.
    Est ce que ce problème peut venir de ma propre machine qui n'a pas assez de mémoire?
    Alors que j'ai quand même 2Go de mémoire vive.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Je vous mets ces 2 fichiers qui construisent la base et les tables dont j'ai besoin. Si ça peut vous aider à comprendre mon problème. Mon fichier xml est trop grand pour le mettre en pièce jointe. Si vous en avez besoin faite moi signe.
    Je continue de chercher de mon compté en espérant trouver.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Alors je viens de réussir a remplir ma base avec mes 13000 enregistrements
    Mais l'erreur s'affiche toujours malgré que la rêquete est réussi l'insertion.
    Que faire?
    Merci

  10. #10
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    J'ai regarder ton code php, j'ai 2 remarques à formuler:

    1/ comme je te l'ai dit plus haut essaye de fractionner ton fichier XML pour voir si en prenant un fichier plus petit les problèmes de saturation mémoire persistent. De cette façon tu sauras que le nombre de ligne traitées a son importance.

    2/ Si j'ai bien compris, ta fonction fonctionBaliseFermante() est appelée par le parser XML autant de fois qu'il y a de ligne dans ton fichier. Le problème c'est que tu dans cette fonction tu ouvre et tu fermes ta connexion. Tu ouvre et tu ferme donc autant de fois qu'il y a de lignes. J'imagine que cela pose un problème ? non ?
    Tu devrais dissocié la connexion BD des requêtes.

    Tiens moi au courant.

Discussions similaires

  1. probleme Jfreechart avec mysql
    Par marouene_ dans le forum 2D
    Réponses: 7
    Dernier message: 21/04/2011, 16h25
  2. Probleme mémoire avec QList
    Par Kimado dans le forum Qt
    Réponses: 10
    Dernier message: 20/04/2009, 23h29
  3. Probleme LoadLibrary avec mysql++
    Par piemur2000 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 20/07/2007, 15h52
  4. probleme date et heure avec mysql.
    Par argon dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/07/2005, 23h42
  5. Probleme avec Mysql
    Par kevinss dans le forum Administration
    Réponses: 5
    Dernier message: 31/10/2003, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo