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

Langage PHP Discussion :

Comment mettre ce code dans une classe ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 80
    Points
    80
    Par défaut Comment mettre ce code dans une classe ?
    Bonjour,

    Voici un code d'exemple qui génère un système de caching :

    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
     
    <?php
     
    $fichier = "testfile.tpl";
    $cache = $fichier . '.cache';
    $expire = time() - 3600;
     
    if (file_exists($cache) && filemtime($cache) > $expire) {
        readfile($cache);
    } else {
        ob_start();
     
        $test = 45;
        $test2 = "Wouuuuuuwwwwww !!!!! Ca marche ...";
     
        include($fichier);
     
        $page = ob_get_contents();
        ob_end_clean();
     
        $id_fichier = fopen($cache, "a+");
        fputs($id_fichier, $page);
     
        echo $page;
    }
     
    ?>
    Rien de bien magique mais efficace.

    Ma question : comment pourrai-je faire passer tous les éléments générant le caching dans une classe pour simplement devoir instancier la classe dans mes différents programmes et non pas devoir chaque fois faire un copier / coller de ceci au début du programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $fichier = "testfile.tpl";
    $cache = $fichier . '.cache';
    $expire = time() - 3600;
     
    if (file_exists($cache) && filemtime($cache) > $expire) {
        readfile($cache);
    } else {
        ob_start();
    ... et de ceci à la fin du programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $page = ob_get_contents();
        ob_end_clean();
     
        $id_fichier = fopen($cache, "a+");
        fputs($id_fichier, $page);
     
        echo $page;
    }
    Merci :-)

  2. #2
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Je te mets juste sur la voie car ma class n'est pas correct : j'ai fais sa a l'oeil
    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
    <?php
     
    class moncache{
     
    	public $fichier;
    	public $cache;
    	public $expire;
     
    	function __construct(){
     
    		$this->fichier = "testfile.tpl";
    		$this->cache = $this->fichier . '.cache';
    		$this->expire = time() - 3600;
     
    	}
    	function caching(){
     
    		if (file_exists($this->cache) && filemtime($this->cache) > $this->expire) {
    		    readfile($this->cache);
    		} else {
    		    ob_start();
     
    		    $test = 45;
    		    $test2 = "Wouuuuuuwwwwww !!!!! Ca marche ...";
     
    		    include($this->fichier);
     
    		    $page = ob_get_contents();
    		    ob_end_clean();
     
    		    $id_fichier = fopen($cache, "a+");
    		    fputs($id_fichier, $page);
     
    		    return $page;
    		}
    	}
     
    }

  3. #3
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 908
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 908
    Points : 14 817
    Points
    14 817
    Par défaut
    J'avais fait un script comme ça à une époque. Je ne dis pas qu'il est parfait, il y a certainement des choses à améliorer, mais si ça peut t'aider :

    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
    <?php
    /**
     * Classe de mise en cache du contenu.
     */
    class Cache {
     
    var $cache_base = 'temp/cache/';
     
    /**
     * Constructeur
     * @param   int     $dureeCache     Durée du cache en secondes
     */
    function Cache( $dureeCache = 3600 )
    {
      global $cache_content, $cache_file;
     
      $this->file         = str_replace( '/home/chemin/jusqu/au/www/', '', $_SERVER['SCRIPT_FILENAME'] ); // Exemple de contenu : mon/dossier/script.php
      $this->dureeCache   = $dureeCache;
      $this->cache_file   = '/home/chemin/jusqu/au/www/' . $this->cache_base . $this->file;
     
      register_shutdown_function( 'call_user_func', array( get_class( $this ), 'genCache_onExit' ) );
     
      mkpath( $this->cache_file );
     
      // Retourne le cache si possible
      $this->cache_use();
     
      $cache_file = $this->cache_file;
     
      // Commence la bufferisation pour la mise en cache
      ob_start( create_function( '$buffer',
                                  'global $cache_content;
                                  $cache_content = $buffer;'
                                )
              );
    }
     
    /**
     * Génère le cache dans le cas où le script s'est bien déroulé.
     */
    function genCache_onExit()
    {
      global $cache_content, $cache_file;
     
      ob_end_flush(); // Arrête la bufferisation en PHP5 (qui ne se termine pas à la fin du script à cause de la fonction de rappel sans return dans ob_start())
     
      // Si le script s'est bien terminé, on crée le cache
      if ( $GLOBALS['EOS'] ) {
        echo $cache_content;
        file_put_contents( $cache_file, $cache_content );
      }
    }
     
    /**
     * Vérifie si le cache est disponible et l'affiche le cas échéant.
     */
    function cache_use()
    {
      clearstatcache();
     
      // Renvoie le contenu du cache s'il existe et qu'il n'est pas périmé
      if ( file_exists( $this->cache_file ) && time() - filemtime( $this->cache_file ) < $this->dureeCache )
      {
        readfile( $this->cache_file );
        exit();
      }
    }
     
    }
     
     
     
    /**
     * Crée une arborescence (vérifie son existence).
     * @param   string  $path   Chemin à créer
     */
    function mkpath( $path )
    {
      $path_pieces = explode( '/', $path );
      array_pop( $path_pieces ); // Supprime le nom du fichier
      $path = '';
     
      while ( !is_null( $piece = array_shift( $path_pieces ) ) ) {
        $path .= $piece . '/';
     
        if ( !is_dir( $path ) ) {
          umask( 0 );
          mkdir( $path, 0777 );
        }
      }
    }
     
    ?>
    Au début de la page à mettre en cache tu as juste à mettre :
    avec la durée si tu ne veux pas celle par défaut, et à la fin de la page tu mets juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $GLOBALS['EOS'] = true;

Discussions similaires

  1. Réponses: 13
    Dernier message: 03/10/2007, 12h25
  2. Comment mettre un JButton dans une JTable
    Par vinceLeBarbare dans le forum Composants
    Réponses: 6
    Dernier message: 05/06/2006, 12h43
  3. Comment définir un tableau dans une classe?
    Par Pragmateek dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 30/04/2006, 21h34
  4. comment mettre des int dans une char??
    Par gronaze dans le forum C
    Réponses: 5
    Dernier message: 21/04/2006, 18h02
  5. Réponses: 2
    Dernier message: 27/03/2005, 17h09

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