Page 1 sur 1

Mettre en cache

Posté : 26 juin 2005, 23:13
par Sined
Bonjour,
J'ai une page web PHP : http://4et3.free.fr/news/ qui récupère les flux RSS de différents sites pour les afficher. Le truc c'est que forcément ca utilsie beaucoup de ressources système et vu qye je suis sur un serveur free, c'est pas très rapide. Au débu pour que se soit plus rapide, j'ai pensé à la compression GZIP, vite abandonné car le temps que le serveur compresse la page, elle auré déjà été téléchargé par le client (non comprésé alle fait dans les 65ko).
Je me suis di qu'il doit être possible qu'un script PHP enregistre la page en HTML toute les heures, comme ça la lenteur se resentira que sur un visiteur par heure se qui est déjà beaucoup moin embettant!
Commen puije faire ça?

Posté : 26 juin 2005, 23:29
par naholyr
Très simple, pour le moment tu fais ça :
$contenu = file_get_contents($fichier_distant);
Au lieu de ça tu vas faire :
// Le temps d'expiration du cache (en seconde, 3600 = 1h)
$expire = 3600; 
// Le dossier contenant les fichiers mis en cache
$dossier_cache = 'cache'; 
// Un nom unique attribué au fichier distant pour sa mise en cache
$fichier_cache = $dossier_cache.'/'.md5($fichier_distant); 
// On met le cache à jour s'il a expiré (ou s'il n'existe pas)
$mettre_a_jour = !is_file($fichier_cache) || time()-filemtime($fichier_cache)>$expire;
if ($mettre_a_jour) {
    // on récupère le contenu distant
    $contenu = file_get_contents($fichier_distant);
    // on crée le fichier de cache
    if ($fp = @fopen($fichier_cache, 'w')) {
        fputs($fp, $contenu);
        fclose($fp);
    }
}
else {
    // on récupère le contenu mis en cache
    $contenu = file_get_contents($fichier_cache);
}
C'est l'algo "de base" de mise en cache, très simple à mettre en oeuvre et à généraliser (pour en faire une fonction par exemple).

Posté : 27 juin 2005, 14:15
par Sined
Très simple, pour le moment tu fais ça :
$contenu = file_get_contents($fichier_distant);
Au lieu de ça tu vas faire :
// Le temps d'expiration du cache (en seconde, 3600 = 1h)
$expire = 3600; 
// Le dossier contenant les fichiers mis en cache
$dossier_cache = 'cache'; 
// Un nom unique attribué au fichier distant pour sa mise en cache
$fichier_cache = $dossier_cache.'/'.md5($fichier_distant); 
// On met le cache à jour s'il a expiré (ou s'il n'existe pas)
$mettre_a_jour = !is_file($fichier_cache) || time()-filemtime($fichier_cache)>$expire;
if ($mettre_a_jour) {
    // on récupère le contenu distant
    $contenu = file_get_contents($fichier_distant);
    // on crée le fichier de cache
    if ($fp = @fopen($fichier_cache, 'w')) {
        fputs($fp, $contenu);
        fclose($fp);
    }
}
else {
    // on récupère le contenu mis en cache
    $contenu = file_get_contents($fichier_cache);
}
C'est l'algo "de base" de mise en cache, très simple à mettre en oeuvre et à généraliser (pour en faire une fonction par exemple).
Je met tout ca dans le fichier php? le dossier cache sera crée à la racine de l'hébergement ou à coté du la page PHP ?