[script] Mise en cache des pages PHP
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
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/
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
}
}
?>
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...
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...
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
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
Re: Mise en cache des pages PHP
fallait que tu m'embrouilles jeunz, ce coup ci je comprends plus rien du tout
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à
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à
Dernière édition par caro le Mer Mai 18, 2005 15:00, édité 1 fois.
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...
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...
Dernière édition par Phix le Mer Mai 18, 2005 15:01, édité 1 fois.
fandecine a écrit:Oups! j'ai fait une erreur de commentaire;![]()
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!
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.
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!
exitez-vous les méninges!
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
)
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
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
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.
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.
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 :
- Les albums web Picasa passent à 1 Go de stockage
- Le cache de Google : description, explications
- Photos satellite des incendies en Grèce dans Google Earth
- L'algorithme de Google en résumé (mars 2003)
- Ajouter un Gadget Google sur son site
- Google Desktop pour Mac OS X
- Picasa Web Albums en français
- Google Pack s'enrichit de 2 nouveaux logiciels gratuits
- Explications sur le Crawl Caching Proxy de Google
- Nouvel article : "Google en résumé"
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités









le forum