[script] Mise en cache des pages PHP

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


JeunZ
WRInaute accro
WRInaute accro
 
Messages: 5301
Inscription: Mer Fév 18, 2004 12:41

Message le Mer Mai 18, 2005 11:43

Ma page consomme énormément niveau sql, 6000 blogs actifs imagine...

Dans les deux cas je génére des fichiers .html dans le cache c'est normal.

Je vous met mon code mais attention faut le suivre ;-)

et si vous doutez de se que je dis allez voir ma charge serveur depuis 2h heure à laquelle j'ai effectué ma modif:
http://ns32019.ovh.net/mrtg/mrtg-sys/

Code: Tout sélectionner
<?PHP


require '/home/httpd/vhosts/mon-blog.org/httpdocs/blog/dotclear/themes/stats.php';



$num=substr_replace($_SERVER['HTTP_HOST'], '', -13);
$ext=substr_replace($_SERVER['HTTP_HOST'], '', 0, -3);
$db1 = mysql_connect("localhost","xxxxxxxxx","xxxxxxx"); 
mysql_select_db("xxxxxxxxxx",$db1);
list($id_blog) = mysql_fetch_array(mysql_query("SELECT id FROM membres WHERE identifiant='$num' AND domaine='$ext'", $db1), MYSQL_NUM);
mysql_close($db1);


# ------- Create directories if directories do not exist

$rep= '/home/httpd/vhosts/mon-blog.org/httpdocs/blog/dotclear/cache/' .$id_blog .'/';

if (!is_dir($rep)){ 

mkdir ( $rep, 0777);

}


$urldemandee=$_SERVER['REQUEST_URI']; //on lit l'adresse de la page
$urldemandee=ereg_replace('/','-',$urldemandee); // on tranforme l'adresse en nom de fichier
if($urldemandee=="-") $urldemandee="-index.html"; // si l'adresse est la racine du site, on ajoute index.html
$fichierCache= "/home/httpd/vhosts/mon-blog.org/httpdocs/blog/dotclear/cache/" .$id_blog ."/".$urldemandee; // on construit le chemin du fichier cache de la page
if (@filemtime($fichierCache)<time()-(3600*24*360)) { //si la page existe dans le cache et n'a pas expirée
   ob_start(); // on démarre la bufferisation de la page: rien de ce qui suit n'est envoyé au navigateur




   
   



   $fd = fopen("$fichierCache", "w"); // on ouvre le fichier cache
   if ($fd) {


# Chemin vers la racine de l'application (si vous changer le fichier de place)
$app_path = '/';


# NE RIEN CHANGER APRES CETTE LIGNE

$blog_file_path = __FILE__;
$blog_dc_path = dirname(__FILE__).$app_path;

require $blog_dc_path.'/layout/prepend.php';


# En-têtes et prologue
# Envoie des en-tête HTTP
$accept_xml =
   !empty($_SERVER['HTTP_ACCEPT']) &&
   strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml') !== false;

if (dc_send_real_xml && $accept_xml) {
   header('Content-Type: application/xhtml+xml');
} else {
   header('Content-Type: text/html; charset='.dc_encoding);
}

//if ($accept_xml) {
//   echo '<?xml version="1.0" encoding="'.dc_encoding.'"    '."\n";
//}




include $dc_template_file;


require $blog_dc_path.'/layout/append.php';


   $contenuCache = ob_get_contents(); // on recuperre le contenu du buffer
   ob_end_flush();// on termine la bufferisation



      fwrite($fd,$contenuCache); // on ecrit le contenu du buffer dans le fichier cache
      fclose($fd);
     }
} else { // le fichier cache existe déjà




if (!empty($_POST['redir'])) {


# Chemin vers la racine de l'application (si vous changer le fichier de place)
$app_path = '/';


# NE RIEN CHANGER APRES CETTE LIGNE

$blog_file_path = __FILE__;
$blog_dc_path = dirname(__FILE__).$app_path;

require $blog_dc_path.'/layout/prepend.php';



}
else{
  include ($fichierCache); // on le copie ici
}


}








?>





fandecine
Modérateur
Modérateur
 
Messages: 1640
Inscription: Sam Avr 02, 2005 14:58

Message le Mer Mai 18, 2005 14:35

hum! c'est dur de lire du code que l'on a pas écrit!

Bon, en fait, que tu ouvre le fichier cache avant ou aprés la fermeture du buffer ne change rien à l'algorythme. Par contre, je suis étonné que ce changement diminu la charge du serveur! est-tu sur que les fichiers caches n'existaient pas déjà quand tu a modifié le script? Faut que je teste!!!

Par contre une remarque sur ton script: ta requete mysql, pourquois ne la met-tu pas en cache? un processus mysql ça consomme, et si tu a un gros traffic...


JeunZ
WRInaute accro
WRInaute accro
 
Messages: 5301
Inscription: Mer Fév 18, 2004 12:41

Message le Mer Mai 18, 2005 14:43

Oui t'inquiete je vais la mettre en cache, c'était juste le temps de tester...

En fait le truc c'est que j'avais mal lu ton code j'avais pas fait gaffe à cette ligne:

if (@filemtime($fichierCache)<time()-(3600*24*360)) {


donc c'est moi qui avait mal lu ton code ;-)

caro
WRInaute passionné
WRInaute passionné
 
Messages: 871
Inscription: Lun Juil 21, 2003 18:13

Re: Mise en cache des pages PHP

Message le Mer Mai 18, 2005 14:51

fallait que tu m'embrouilles jeunz, ce coup ci je comprends plus rien du tout :lol:

if (@filemtime($fichierCache)<time()-(3600*24*360)) {
ob_start();
si la page existe et n'a pas expiré, pourquoi on bufferise plutot que directement récupérer include ($fichierCache); ?

tu te serais pas trompé dans l'annotation d'explications, ce serait pas le contraire :
if (@filemtime($fichierCache)<time()-(3600*24*360)) { //si la page n'existe pas dans le cache ou a expirée
ob_start(); // on démarre la bufferisation de la page

oulà :oops:
Dernière édition par caro le Mer Mai 18, 2005 15:00, édité 1 fois.


Phix
WRInaute impliqué
WRInaute impliqué
 
Messages: 420
Inscription: Mar Juin 15, 2004 22:05

Message le Mer Mai 18, 2005 14:59

Il fait: time()-(3600*24*360) , ce qui correspond à l'heure actuelle il y a un an.
Ensuite: filemtime($fichierCache)<time()-(3600*24*360), ce qui correspond à : est-ce que la date du fichier cache est inférieure à l'heure actuelle moins un an? ou plu simplement est-ce que le fichier est plus vieux d'un an?
Si c'est le cas on bufferise pour recréer le cache...

Edit: désolé je pensais que tu ne comprenais pas l'instruction php... :oops:
Dernière édition par Phix le Mer Mai 18, 2005 15:01, édité 1 fois.


fandecine
Modérateur
Modérateur
 
Messages: 1640
Inscription: Sam Avr 02, 2005 14:58

Message le Mer Mai 18, 2005 15:00

Oups! j'ai fait une erreur de commentaire; :oops:

c'est "si la page n'existe pas dans le cache ou si elle a expiré";

je corrige de suite!

Bravo, caro! tu est la seule à avoir remarqué la bourde! :D

caro
WRInaute passionné
WRInaute passionné
 
Messages: 871
Inscription: Lun Juil 21, 2003 18:13

Message le Mer Mai 18, 2005 15:01

merci beaucoup fandecine, maintenant je comprends bien ton code et je le trouve excellent !
je te félicite et te remercie de nous avoir fait partager ton expérience.
mon serveur aussi te remercie :lol: :lol: :lol:
carole


JeunZ
WRInaute accro
WRInaute accro
 
Messages: 5301
Inscription: Mer Fév 18, 2004 12:41

Message le Mer Mai 18, 2005 15:07

fandecine a écrit:Oups! j'ai fait une erreur de commentaire; :oops:

c'est "si la page n'existe pas dans le cache ou si elle a expiré";

je corrige de suite!

Bravo, caro! tu est la seule à avoir remarqué la bourde! :D


Ba non c'est se qui m'embrouillait aussi et depuis hier lol.

J'ai été obligé de virer tes commentaires pour tenter de comprendre en début d'aprem lol.

caro
WRInaute passionné
WRInaute passionné
 
Messages: 871
Inscription: Lun Juil 21, 2003 18:13

Message le Mer Mai 18, 2005 15:10

en tout cas encore merci fandecine :wink:


fandecine
Modérateur
Modérateur
 
Messages: 1640
Inscription: Sam Avr 02, 2005 14:58

Message le Mer Mai 18, 2005 15:56

allez, hop! je vous ai concoté un autre script sur le fil http://www.webrankinfo.com/forums/viewtopic_28684.htm

exitez-vous les méninges! :D


Cartapus
WRInaute impliqué
WRInaute impliqué
 
Messages: 475
Inscription: Ven Juin 18, 2004 21:57

Message le Dim Mai 22, 2005 1:25

Une question, comment se comporte ce système vis à vis des robots d'indexation? voient ils toujours les mêmes pages ou n'y aurait il pas un problème de duplicate content dû au fait que l'extension html apparaisse? :)


Phix
WRInaute impliqué
WRInaute impliqué
 
Messages: 420
Inscription: Mar Juin 15, 2004 22:05

Message le Dim Mai 22, 2005 14:23

Pour le visiteur comme pour le robot, il n'y a pas de différence. Ce script mais juste en cache le contenu ou l'inclut s'il est déjà en cache, c'est complètement invisible (enfin pas au niveau du serveur, qui peut souffler un peu :lol: )


Cartapus
WRInaute impliqué
WRInaute impliqué
 
Messages: 475
Inscription: Ven Juin 18, 2004 21:57

Message le Dim Mai 22, 2005 16:22

Merci pour ta réponse en fait je n'avais pas lu le script avant de poser ma question, j'ai pas l'air fin maintenant :mrgreen:


romane
WRInaute discret
WRInaute discret
 
Messages: 59
Inscription: Lun Avr 04, 2005 18:37

Message le Mar Juin 07, 2005 15:45

salut,
J'essais de comprendre cette nouvelle notion (pour moi) de mise en cache!
Je suis en train de créer un site proposant la possibileté de créer des albums photos! Parconséquent il semble judicieux d'utiliser la mise en cache!(pour éviter de répéter toutes les requetes MySQL)
Si j'ai bien compris, il me faudra régénérer le cache à chaque fois qu'un nouveau utilisateur met à jour son album????
(dites moi si c'est ca SVP)

merci
bye


fandecine
Modérateur
Modérateur
 
Messages: 1640
Inscription: Sam Avr 02, 2005 14:58

Message le Mar Juin 07, 2005 16:09

bonjour,

La page en cache est généré automatiquement lors du chargement de la page de ton site. Si tu fait une mise à jour d'une page, le mieux est de faire un script qui efface la page correspondante du cache lors de la mise à jour.

[script] Mise en cache des pages PHP [script] Mise en cache des pages PHP

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités