gestion de cache réparti sur plusieurs répertoires pour limiter le nb de fichier

WRInaute passionné
gestion de cache réparti sur plusieurs répertoires pour limi

Bonjour tout le monde,

La gestion de fichier en cache est très utile pour limiter les ressources machine, et augmenter le temps d'affichage de page.
Certes l'inconvenient qui en résulte est une augmentation de l'espace de stockage puisque chaque page mise en cache est en quelques sorte le moyen de créer des pages statiques à partir d'une seule page dynamique. (l'excellent article de fandecine explique le principe et propose même un script très fonctionnel)

Pour ma part, sur un de mes sites, le temps d'affichage à été concidérablement réduit dès lors que j'ai géré la mise en cache sur mon serveur des pages dynamiques.

Néanmoins, n'y a-t-il pas de limite, ou de gros inconvenient à ce que toutes ces pages soient stoquées dans un seul et même dossier.

En l'occurence, j'ai pour le moment un peu plus de 5000 fichiers dans un répertoire cache, et lorsque je veux fouiner dedans, dia ftp par exemple, il arrive que le temps de réponse trop long pour afficher l'intégralité des fichiers fasse passer la liaison en sécurité pour time out.

D'où ma question peut-on générer des pages dans divers repertoires de façon automatique. Par exemple lorsque le nb de page atteint 1000 dans un dossier ?
 
WRInaute passionné
Tu peux avoir un système de cahe qui cache dans des répertoires aussi. Ca dépend de ton système donc.
Tu utilises quoi?
 
WRInaute passionné
Bacteries a dit:
Tu peux avoir un système de cahe qui cache dans des répertoires aussi. Ca dépend de ton système donc.
Tu utilises quoi?

j'utilise le principe de fandecine :

Code:
<?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
   
?> 


blabla

<?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
}
?>

Mes urls sont de la forme -http://ndd/page-1.html, -http://ndd/page-2.html, -http://ndd/page-n.html

mes fichiers en cache sont donc de la forme cache-page-n.html

Comment procéder par que les pages soient mises en cache dans divers répertoires dès que le nombre de fichiers en cache atteint 1000 ainsi :
/cache/a/cache-page-1.html à cache-page-1000.html puis
/cache/b/cache-page-1001.html à cache-page-2000.html etc .
 
WRInaute passionné
J'ajoute que je ne suis pas figé à une solution de 1000 fichiers. Ce peut par exemple générér un répertoire de cache chaque mois de l'année par exemple
 
WRInaute passionné
tu peux faire une fonction qui détermine un répertoire de cache en fonction du numéro extrait avec une petite regex
une division du numéro par 1000 permet de déterminer le numéro de répertoire
 
WRInaute passionné
tu peux faire une fonction qui détermine un répertoire de cache en fonction du numéro extrait avec une petite regex une division du numéro par 1000 permet de déterminer le numéro de répertoire
C'est effectivement une solution que j'avais envisagée car c'est assez facile de manipuler des chiffres, d'où mon orientation première pour un répertoire tous les 1000 fichiers.

Merci, je vais tester cette solution
 
WRInaute passionné
Re: gestion de cache réparti sur plusieurs répertoires pour limi

Après quelques essais, la solution fonctionne parfaitement. Je note même un gain de temps à l'affichage.
 
Discussions similaires
Haut