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 :

valeurs de $dbo->memoryQuery() dans un fichier [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 245
    Par défaut valeurs de $dbo->memoryQuery() dans un fichier
    bonjour,
    j'ai récupérer un extend de PDO sur un autre forum pour obtenir le temps de chacune de mes requêtes que voici et qui fonctionne très bien
    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
     
    <?php
     
    class MyPDO extends PDO {
     
        protected $counter 		= 0;
        protected $racine;
        protected $memoryQuery	= array();
        protected $time		= 0;
     
        // GETTER
     
        //nombre de requete
        public function getCounter() {
            return $this->counter;
        }
     
        //liste des requetes effectué avec leur temps d'excution
        public function memoryQuery() {
            return $this->memoryQuery;
        }
     
        //temps total
        public function time() {
            return $this->time;
        }
     
        public function increment() {
            $this->counter ++;
        }
     
        public function addQuery($query, $time=0) {
            $this->memoryQuery[$this->getCounter()]['query'] = $query;
            $this->memoryQuery[$this->getCounter()]['time'] = $time;
     
        }
     
        public function addTime($time) {
            $this->time += $time;
        }
     
        function __construct($dsn, $username="", $password="", $driver_options=array()) {
            parent::__construct($dsn,$username,$password, $driver_options);
     
            // Utilisation de myPDOStatement
            $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('myPDOStatement', array($this)));
        }
     
     
        public function query($query) {
     
            $tmpTemps = microtime(true);
            $return = parent::query($query);
            $addTime = round(microtime(true) - $tmpTemps,5);
     
            $this->addQuery($query,$addTime);
            $this->addTime($addTime);
            $this->increment();
     
            return $return;
        }
     
     
        public function exec($query) {
     
            $tmpTemps = microtime(true);
            $return = parent::exec($query);
            $addTime = round(microtime(true) - $tmpTemps,5);
     
            $this->addQuery($query,$addTime);
            $this->addTime($addTime);
            $this->increment();
     
            return $return;
        }
    pour l'utiliser, je mets cela dans la page ou se trouve mes requêtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     print_r($dbo->memoryQuery());
    qui m'affiche ce-ci:
    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
     
    Array
    (
        [0] => Array
            (
                [query] => SELECT .....
     
                 [time] => 0.06189
            )
     
        [1] => Array
            (
                [query] =>SELECT .....
     
              [time] => 0.0200
            )
    ce que j'aimerai c'est "mettre" les valeurs de $dbo->memoryQuery() dans un fichier.
    j'ai fais cela pour l'écriture:
    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
     
       if(file_exists('temps.txt'))
         {
                echo 'Le fichier existe';
                echo "<br>";
                $ressource_fichier = fopen('temps.txt', 'w');
     
                if($ressource_fichier AND is_writable('temps.txt')) //Si $ressource_fichier ne vaut pas FALSE et que le fichier est accessible en écriture alors on peut continuer
                {
                    echo "<pre>";
                    fputs($ressource_fichier,print_r($dbo->memoryQuery())); //Si une erreur a lieu, fputs() renverra FALSE, il faudra dans ce cas utiliser l'opérateur triple égal pour le savoir
                     echo "</pre>";
                    fclose($ressource_fichier);
                }
         }
         else
         {
              echo 'Le fichier n\'existe pas';
         }
    et la pour l'affichage dans une autre page php:
    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
     
     $ressource_fichier = fopen('temps.txt', 'r');
     
         if($ressource_fichier) //Si $ressource_fichier ne vaut pas FALSE on peut continuer
         {
              $contenu_fichier   = '';
     
              while(!feof($ressource_fichier)) //Tant que l'on est pas à la fin du fichier
              {
                   $contenu_fichier .= fgets($ressource_fichier); //Récupère la ligne en cours et l'ajoute au contenu de la variable $contenu_fichier
              }
     
              fclose($ressource_fichier);
     
              echo $contenu_fichier; //affiche le contenu du fichier
         }
    mon problème c'est que lorsque je vais voir mon fichier temps.txt il m'affiche '1'. si je mets pas print_r il va afficher "$dbo->memoryQuery()". je n'arrive pas avoir comment faire.
    merci d'avance.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    print_r affiche directement sur la sortie standard, pour obtenir une chaîne à la place, il faut spécifier son deuxième paramètre à TRUE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputs($ressource_fichier, print_r($dbo->memoryQuery(), TRUE));
    Cf documentation.

    PS : je n'ai pas regardé le code.

  3. #3
    Membre éclairé
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2010
    Messages : 245
    Par défaut
    je te remercie cela fonctionne.
    merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauver valeur d'une boucle for dans un fichier texte
    Par nikob88 dans le forum MATLAB
    Réponses: 8
    Dernier message: 25/05/2012, 15h18
  2. Réponses: 6
    Dernier message: 27/03/2012, 15h58
  3. Réponses: 2
    Dernier message: 11/12/2011, 14h41
  4. Réponses: 1
    Dernier message: 23/09/2009, 10h35
  5. [D6] Recherche d'une valeur dans un fichier
    Par Lung dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2005, 08h26

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