[script] Mise en cache des pages PHP

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

oberon
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 154
Inscription: Ven Sep 26, 2003 17:57

Message le Mar Mai 17, 2005 20:28

marrrant, j'ai implémenté le même système il y a un an pour le site de mon boulot :)


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

Message le Mar Mai 17, 2005 21:29

Code: Tout sélectionner
<form action="<?php dcPostUrl(); ?>" method="post" id="comment-form">
<fieldset>


j'ai ça dans une page, et dans le cache <?php dcPostUrl(); ?> = rien du tout.

en gros dans le cache ça me donne:

Code: Tout sélectionner
<form action="" method="post" id="comment-form">
<fieldset>


une idée du pourquoi du comment?


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

Message le Mar Mai 17, 2005 22:06

peut-tu nous donner le source de la fonction dcPostUrl()


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

Message le Mar Mai 17, 2005 22:16

Code: Tout sélectionner
@function dcPostURL

Cette fonction affiche l'URI du billet, son permalien. On l'utilisera dans
l'affichage d'un billet (boucle ou pas). Par exemple:

|<a href="<?php dcPostURL(); ?>">lien permanent</a>
*/
function dcPostURL()
{
   echo $GLOBALS['news']->getPermURL();
}



et bien sur je suis allé cherché après getpermurl:

Code: Tout sélectionner
# Lien permanent vers le commentaire
   function getPermURL()
   {
      $post_titre_url = $this->blog->str2url($this->f('post_titre'));
      
      $url = sprintf($this->blog->front_url['post'],$this->f('postyear'),
               $this->f('postmonth'),$this->f('postday'),
               $this->f('post_id'),$post_titre_url);
      
      return $url.'#c'.$this->f('comment_id');
   }


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

Message le Mar Mai 17, 2005 22:31

là, ça se corse! y a des variables partout! Faudrait voir le code complet. Si ça te pose vraiment de gros problèmes envoie moi le code par mp, je regarde ça demain.


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

Message le Mer Mai 18, 2005 0:26

Je trouve le code assez mal fait en fait... Peut etre parsque j'ai pas tout comprit mais:

Votre page PHP ici

moi cette partie je l'aurai mit dans

if ($fd) {

en adaptant histoire de n'executer le code php QUE SI LE CACHE n'existe pas, car la j'ai l'impression que tu l'executes de toute façon non?


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

Message le Mer Mai 18, 2005 0:37

pourtant, j'ai mis les commentaires JeunZ! Tu est fatigué ou tu me teste?

le secret c'est ob_start(); à partir de la, tout ce qui suit n'est pas envoyé au navigateur mais bufférisé.

ensuite, ob_get_contents() récupére le contenu du buffer, on peut alors areter la bufferisation avec ob_end_flush() et sauvegarder le contenu dans le fichier cache.

simple, non?


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

Message le Mer Mai 18, 2005 0:57

Je suis d'accord (je suis pas un pro je vais sans doute dire une connerie, surtout que je n'ai jamais utilisé cette histoire de buffer), mais même si ce n'est pas envoyé au navigateur c'est executé coté serveur non?

(aie ca y est je crois que j'ai dit la connerie).


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

Message le Mer Mai 18, 2005 1:11

Forcement, c'est du php. :wink:


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

Message le Mer Mai 18, 2005 2:00

Et bien alors si on met une condition sur l'existance du fichier cache on peut ne pas executer le code php et ainsi économiser des ressources serveurs.


Si cache alors on met le cache sinon on execute le code php et on génère le cache.


C'est mieux que :

On execute le code php, si le cache existe on affiche le cache sinon on génère le cache et on affiche le code php.


Dans la seconde solution celle présentée ici on execute toujours le code php alors que dans un cas c'est inutile je crois.


itsme
WRInaute passionné
WRInaute passionné
 
Messages: 744
Inscription: Mer Oct 13, 2004 14:13

Message le Mer Mai 18, 2005 8:24

Vous savez que JP-Cache fait tout cela tres bien, rapidement et depuis tres longtemps ? ;)


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

Message le Mer Mai 18, 2005 8:26

Code: Tout sélectionner
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
?>
[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
}

Jeunz -> c'est ce qu'il fait. Avant de buffériser, il teste si le cache n'est pas expiré, si c'est le cas il fait le include du fichier en cache, sinon il exécute le code en le bufférisant


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

Message le Mer Mai 18, 2005 11:02

Ba alors je comprend pas car avec la méthode ci dessu testé hier pendant 3h la charge de mon dédié n'a pas changé par contre j'avais un affichage un peu plus rapide.

J'ai fait ma modif, et ma charge est depuis lors divisée par 10...


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

Message le Mer Mai 18, 2005 11:31

Tu peux mettre ta modification? Est-ce que tu as pu constater que des fichiers étaient créés dans le répertoire cache?
C'est bizarre, parce que dans la logique du script de fandecine, il n'exécute le php que si le fichier est expiré...


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

Message le Mer Mai 18, 2005 11:34

Attention! Si la page PHP que tu met en cache consomme peu de resources, tu vera pas de changement notoire de charge. Par contre si ttu fait un max de requettes Mysql, y a pas photo ni sur la vitesse de chargement, ni sur la charge du serveur.

Par exemple, lorsque je fais une grose Maj sur mon site, je peux te dire que je vois la charge grimper en fleche jusqu'a ce que le cahe soit regénéré.

Maintenent je serais curieux de voir ton code modifié!?

[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