Mettre en cache

Eléphanteau du PHP | 45 Messages

26 juin 2005, 23:13

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?

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

26 juin 2005, 23:29

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).

Eléphanteau du PHP | 45 Messages

27 juin 2005, 14:15

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 ?