Formation par Olivier Duffez

Formation au référencement par Olivier Duffez, créateur de WebRankInfo !
Une formule efficace alliant théorie et pratique, avec une haute disponibilité des intervenants
Cette formule a déjà convaincu plusieurs centaines d'entreprises, pourquoi pas vous ?
Réservez vite votre place en ligne (convention possible pour imputer sur le budget formation)

Formation référencement Marseille

[script] Mise en cache des pages PHP

Aller à la page 1, 2, 3 ... 13, 14, 15  Suivante
Poster un nouveau sujet Imprimer cette discussion    Forum -> Développement d'un site Web   Les dernières discussions de ce forum sont disponibles au format RSS
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1393
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Mai 17, 2005 16:26    Sujet du message: [script] Mise en cache des pages PHP

Razz voila, j'ouvre ce nouveau fil pour plusieurs raison:

- suite à une discussion animée d'hier soir sur le forum Webrankinfo ou il était question de partage de connaissances, de pédagogie, d'aciens et de nouveaux wrinautes (j'espère quen tant que nouveau, j'apprendrais quelque chose aux anciens pour pas qu'ils se barrent! Wink )
- parce que 'j'ai vu plusieurs fils ou les webmasters s'interrogent sur le passage du mutualiser au dédié (l'astuce que je donne ici permet de soulager énormément le serveur)

Si le truc que je vous communique est déjà archi connu, vous avez le droit de m'insulter!

Voila, sur tous mes sites et ceux de mes clients, j'utilise une mise en cache des pages PHP sous forme de page HTML (non, ce n'est pas pareil que générer un site en HTML statique à partir d'un site dynamique!).

Je vous donne le code plus bas. Idea

Pourquois procéder de la sorte? tout simplement pour limiter le nombre de requetes mysql (grosses consommatrices de ressources CPU). Pour ceux qui ont du mal à comprendre, cela permet d'eviter le 'too many connection'. Bon si vous êtes sur un mutualisé, ça ne peut être efficace que si tout le monde fait de même. Par contre, sur mes serveurs dédiés, à serveur et traffic équivalent, je double le nombre de sites hébergés!

Code:
[i]ici code php que vous ne voulez pas mettre en cache[/i]
<?PHP
$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="cache/cache".$urldemandee; // on construit le chemin du fichier cache de la page
if (@filemtime($fichierCache)<time()-(3600*24*360)) { //si la page n'existe pas dans le cache ou si elle a expiré
   ob_start(); // on démarre la bufferisation de la page: rien de ce qui suit n'est envoyé au navigateur
?>
[i]Votre page PHP ici[/i]
<?php
   $contenuCache = ob_get_contents(); // on recuperre le contenu du buffer
   ob_end_flush();// on termine la bufferisation
   $fd = fopen("$fichierCache", "w"); // on ouvre le fichier cache
   if ($fd) {
      fwrite($fd,$contenuCache); // on ecrit le contenu du buffer dans le fichier cache
      fclose($fd);
     }
} else { // le fichier cache existe déjà
  include ($fichierCache); // on le copie ici
}
?>


Que fait ce script:

1/ il recupere l'url de la page
2/ transforme cet url en un nom de fichier sans /
3/ teste l'existance de ce fichier dans le répertoire /cache/
4/ si le fichier n'existe pas, génére la page, puis la stoque dans le repertoire cache
/5 si le fichier existe, l'ouvre en tant que page html

La page html est générée lors de la premiere requete. Avce ce système, il faut gerer le cache lors des mises à jour (effacer la page du cache correspondante).

Je gere un site de + de 80 000 pages avec ce système sans problème notoire!

Voila!

si vous êtes sages et que ce fil a du succé, je vous filerez une autre astuce de temps en temps.
Code:


Dernière édition par fandecine le Mer Mai 18, 2005 16:01; édité 3 fois
 
fandecine Visiter le site web du posteur
Phix
WRInaute impliqué
WRInaute impliqué

Inscrit le: 15 Juin 2004
Messages: 418
Localisation: Lyon & Savoie

URL permanente de ce messagePosté le : Mar Mai 17, 2005 16:34    Sujet du message: [script] Mise en cache des pages PHP

Merci pour ce code! Même si je n'ai pas encore de problèmes au niveau des performances de mon hébergement, j'essaierai de mettre en place ce système, mieux vaut prévenir que guérir Wink
Si j'ai bien compris, tu te sers de cette ligne:
Code:
if (@filemtime($fichierCache)<time()-(3600*24*360))

pour spécifier la durée d'expiration d'un fichier cache, et si je sais bien calculer, là il est spécifié que si le fichier a moins d'un an d'existence, on ne le rafraîchit pas. C'est bien ca?
 
Phix Visiter le site web du posteur
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1393
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Mai 17, 2005 16:42    Sujet du message: [script] Mise en cache des pages PHP

c'est ça! Very Happy
 
fandecine Visiter le site web du posteur
Phix
WRInaute impliqué
WRInaute impliqué

Inscrit le: 15 Juin 2004
Messages: 418
Localisation: Lyon & Savoie

URL permanente de ce messagePosté le : Mar Mai 17, 2005 16:51    Sujet du message: [script] Mise en cache des pages PHP

Il y a même possibilité d'améliorer ton script: dans spip (qui propose aussi un système de cache), chaque page peut être rechargée grâce à un paramètre GET recalcul, il suffirait de faire:
Code:
if (@filemtime($fichierCache)<time()-(3600*24*360) || isset($_GET['recalcul']))

pour ne pas avoir à se connecter en ftp et supprimer le fichier pour faire une mise à jour... on aurait qu'à appeller la page avec ce paramètre recalcul.
 
Phix Visiter le site web du posteur
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1393
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Mai 17, 2005 16:55    Sujet du message: [script] Mise en cache des pages PHP

j'y avais pensé, mais quand je fais des mises à jour, ça concernne parfois des centaines de pages et là le ftp est imbatable!
 
fandecine Visiter le site web du posteur
caro
WRInaute passionné
WRInaute passionné

Inscrit le: 21 Juil 2003
Messages: 872

URL permanente de ce messagePosté le : Mar Mai 17, 2005 17:09    Sujet du message: [script] Mise en cache des pages PHP

merci fandecine c'est énorme, ça fait un moment que je voulais m'y mettre.

par contre pour faire la casse pieds, tu pourrais pas mettre en anotation le rôle de chaque ligne avec des "//" comme ça ce serait plus facile à comprendre.
à partir de "ob_start(); " je suis complètement perdue Embarassed

merci
carole
 
caro
spout
WRInaute passionné
WRInaute passionné

Inscrit le: 14 Mai 2003
Messages: 569
Localisation: Manhay (Belgique)

URL permanente de ce messagePosté le : Mar Mai 17, 2005 17:12    Sujet du message: [script] Mise en cache des pages PHP

Salut,

Moi aussi j'utilise du cache HTML, il n'y a rien de tel Smile

Mais avec des templates à la "Smarty" sauf que c'est du PHP PUR !
Pas besoin de réinventer la roue, PHP est parfait pr les templates Wink

Je ne coupe plus la page en header/footer comme l'on ferais avec des pseudo templates PHP, c'est bcp plus simple à modifier le "layout".

Le tuto sur lequel je me suis basé:
http://www.massassi.com/php/articles/template_engines/

Je ne remercierais jamais assez Brian Lozier d'avoir montré cette superbe alternative à Smarty... j'étais parti pour utiliser Smarty puis je suis tombé là dessus...
 
spout
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1393
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Mai 17, 2005 17:28    Sujet du message: [script] Mise en cache des pages PHP

caro a écrit:
par contre pour faire la casse pieds, tu pourrais pas mettre en anotation le rôle de chaque ligne avec des "//" comme ça ce serait plus facile à comprendre.


meuh non! t'es pas casse pieds carole! Very Happy

je t'ai rajouté tout plein de commentaires.
 
fandecine Visiter le site web du posteur
JeunZ
WRInaute accro
WRInaute accro

Inscrit le: 18 Fév 2004
Messages: 5306

URL permanente de ce messagePosté le : Mar Mai 17, 2005 17:54    Sujet du message: [script] Mise en cache des pages PHP

Exactement se que je suis en train de mettre en place depuis trois jours sur mes sites Wink

C'est génial Smile

Et avec un dédié on peut en plus coupler ça avec d'autres caches (sql, php accelerator)
 
JeunZ
Madrileño
WRInaute accro
WRInaute accro

Inscrit le: 07 Juil 2004
Messages: 10785
Localisation: -------------- Ancien retraité du forum ! -------------------------- :)

URL permanente de ce messagePosté le : Mar Mai 17, 2005 17:56    Sujet du message: [script] Mise en cache des pages PHP

fandecine l'astuce est très interessante et j'imagine que ohax va débarquer pour en donner son opinion Laughing
sinon les pavés je suis pas trop fans mais c'est très gentil de mettre cette formule que jai lu directement et que j'apprécie beaucoup Wink
 
Madrileño Visiter le site web du posteur
JeunZ
WRInaute accro
WRInaute accro

Inscrit le: 18 Fév 2004
Messages: 5306

URL permanente de ce messagePosté le : Mar Mai 17, 2005 18:16    Sujet du message: [script] Mise en cache des pages PHP

Il manque la supression du cache...

En fait il faudrait expliquer comment supprimer les fichiers si on modifie la page plutot que d'attendre la fin du temps de cache ça permettrai de l'appliquer à un forum par exemple, ou à un blog Wink
 
JeunZ
spout
WRInaute passionné
WRInaute passionné

Inscrit le: 14 Mai 2003
Messages: 569
Localisation: Manhay (Belgique)

URL permanente de ce messagePosté le : Mar Mai 17, 2005 18:20    Sujet du message: [script] Mise en cache des pages PHP

Pour la suppression du cache:
La solution que l'on pense de suite:

Code:

exec("rm -f /home/user/public_html/cache/*");


Mais lorsque l'on se retrouve avec beaucoup de fichiers dans un répertoire, il y'a une limitation quelque part dans le kernel linux pour le nombre de fichiers, alors la commande ci-dessus ne fonctionneras plus.

La solution ultime:
Code:

exec("find /home/user/public_html/cache/ | xargs rm");
 
spout
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1393
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Mai 17, 2005 18:34    Sujet du message: [script] Mise en cache des pages PHP

hola! j'avais dit une astuce à la fois! Wink

bon, prenons un cas concret. Sur le site de mon profil, je vais, cette nuit Crying or Very sad , malgrés la fatigue metre à jour la page des sorties en salles (mais aussi des sorties de la semaine prochaine, ajouter des films, des affiches etc...). J'efface le cache en FTP avec une routine du style de celle-ci:

Code:
<?php
   $conn_id = ftp_connect("ftp.monsite.com");
   $login_result = ftp_login($conn_id, "loginftp", "passwordftp"); //connection ftp
   @ftp_site ($conn_id, "CHMOD 777 chemin_vers_le_fichier_a_effacer"); // on change les droit sur le fichier pour pouvoir l'effacer
   @ftp_delete ($conn_id, "chemin_vers_le_fichier_a_effacer
"); // on efface le fichier
   //si plusieurs fichiers à effacer
   foreach (glob("chemin_vers_les_fichiers_a_effacer-*.html") as $filename) { // liste des fichiers correpondants au masque
      @ftp_site ($conn_id, "CHMOD 777 ".$filename);
      @ftp_delete ($conn_id, $filename);
   }
   ftp_quit($conn_id);
?>


N.B: Le ficheir cache est crée par un script PHP, donc avec les attributs groupe et owner egale à PHP. Le fichier cache est supprimé en FTP donc avec l'attribut loginftp! c'est pour cela qu'il faut d'abord changer les droits du fichier à effacer en 0777 pour pouvoir l'effacer.

Voila, c'est un script trés parcellaire car il est trop dépendant de la structure du site, mais couplé à une BDD et une requete mysql c'est trés puissant!
 
fandecine Visiter le site web du posteur
JeunZ
WRInaute accro
WRInaute accro

Inscrit le: 18 Fév 2004
Messages: 5306

URL permanente de ce messagePosté le : Mar Mai 17, 2005 18:39    Sujet du message: [script] Mise en cache des pages PHP

Et je crois que tu as oublié de préciser que c'est un cache d'un an non?

3600*24*360
 
JeunZ
fandecine
Modérateur
Modérateur

Inscrit le: 02 Avr 2005
Messages: 1393
Localisation: Béarn

URL permanente de ce messagePosté le : Mar Mai 17, 2005 18:59    Sujet du message: [script] Mise en cache des pages PHP

en fait j'ai mis un an pour etre sur que le fichier ne soit pas regénéré avant un moment, mais je suis actuellement en train de valider ma BDD enregistrement par enregistrement et dans l'avenir, je donnerais une durée de vie infinie aux fichier cache valides (aucune raison de les générer à nouveau).

Un enregistrement (par exemple un film) est validé lorsque j'ai toutes les infos (casting, synopsis, durée etc...) et toutes les ressources annexes (wallpapers, bande annonce, jaquettes...) A ce moment là, la fiche n'étant plus mise à jour, aucune raison d'effacer le cache.

Par contre, lorsque je modifie le code des pages, je renome le répertoire cache (en connexion SSH) puis j'en recré un vide et hop, ça reppart.

PS: si vous avez des questions, faudrat attendre demain car j'ai un RDV... a demain Very Happy
 
fandecine Visiter le site web du posteur
 
Montrer les messages depuis:   
Revenir en haut    Forum -> Développement d'un site Web Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 15 - Aller à la page 1, 2, 3 ... 13, 14, 15  Suivante
Connexion
Nom d'utilisateur:    Mot de passe:      Se connecter automatiquement à chaque visite    

Définitions :

CLIQUEZ ICI pour vous inscrire à WebRankInfo (forum, annuaire, outils...)

Connexion

© 2001-2005 phpBB Group, support français
Personnalisation : WebRankInfo ™


 ODP  Firefox  Alsacreations  annuaire webmaster Yagoort