Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2008, 14h34   #1
Membre du Club
 
Inscription : février 2007
Messages : 117
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 117
Points : 45
Points : 45
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 :
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 :
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 :
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 :-)
oranocha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2008, 12h08   #2
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Je te mets juste sur la voie car ma class n'est pas correct : j'ai fais sa a l'oeil
Code :
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;
		}
	}
 
}
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2008, 14h51   #3
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
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 :
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 :
$GLOBALS['EOS'] = true;
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h29.


 
 
 
 
Partenaires

Hébergement Web