Bonjour,
fandecine a fait un superbe script de mise en cache en PHP il est accesible sur cette page :
https://www.webrankinfo.com/forum/t/script-mise-en-cache-des-pages-php.28614/
Son script fonctionne très bien mais que pour les petits/moyens sites, s'il y a plusque 1 million fichiers cache ça va provoquer les performance du serveur.
j'ai ajouté des petits trucs pour l'améliorer pour qu'il supporte 600 millions fichiers cache facilement.
voici le script final :
Le principe est simple, c'est de convertir chaque "page actuelle" en MD5, et de créer un dossier des 3 première caractères, et après on compare, si le 3 premières caractères du MD5 de notre page correspond à un dossier on met dedans.. donc on aura en total 15 x 15 x 15 (15 puissance 3 correspond à l'hexa (15) X 3 caractères) dossiers cache, ce qui fait 3375 dossiers.
donc pour 2 millions pages on aura seulement 592 fichiers par dossier
Voilà, je l'ai fais par besoin, mon serveur rame à cause de quelque millions fichiers cache, je me suis dis ça peut être utile pour quelques membres sur WRI.
fandecine a fait un superbe script de mise en cache en PHP il est accesible sur cette page :
https://www.webrankinfo.com/forum/t/script-mise-en-cache-des-pages-php.28614/
Son script fonctionne très bien mais que pour les petits/moyens sites, s'il y a plusque 1 million fichiers cache ça va provoquer les performance du serveur.
j'ai ajouté des petits trucs pour l'améliorer pour qu'il supporte 600 millions fichiers cache facilement.
voici le script final :
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
if(!is_dir("cache/".substr(md5($_SERVER['REQUEST_URI']), -3))) { mkdir("cache/".substr(md5($_SERVER['REQUEST_URI']), -3)); }
$fichierCache="cache/".substr(md5($urldemandee), -3)."/".$urldemandee.".html"; // 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
echo "Votre contenu à mettre en cache ici";
$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
}
?>
Le principe est simple, c'est de convertir chaque "page actuelle" en MD5, et de créer un dossier des 3 première caractères, et après on compare, si le 3 premières caractères du MD5 de notre page correspond à un dossier on met dedans.. donc on aura en total 15 x 15 x 15 (15 puissance 3 correspond à l'hexa (15) X 3 caractères) dossiers cache, ce qui fait 3375 dossiers.
donc pour 2 millions pages on aura seulement 592 fichiers par dossier

Voilà, je l'ai fais par besoin, mon serveur rame à cause de quelque millions fichiers cache, je me suis dis ça peut être utile pour quelques membres sur WRI.