[PHP] Gestion de vos fichers caches

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Chacho, 10 Décembre 2007.

  1. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    Hey,

    Alors depuis un petit bout de temps, je me suis mis à utiliser les fonctions ( bien pratiques j'avoue ) de cache de PHP ( ob_start etc ) et je m'interroge sur la meilleure structure pour stocker mes fichiers caches alors j'aimerai bien savoir comment vous faites.

    Je vois deux manières, je stocke mes fichiers caches dans leurs dossiers respectifs ( par exemple, les fichiers caches du dossier actus dans le dossier actus ou dans un dossier cache à l'interieur ) ou alors vous avez un dossier cache à la racine de votre site et vous y stockez vos fichiers caches ( la encore dans des dossiers ou non ).

    Peut-être que ça change pas grand chose, peut-être que si alors j'aimerai bien avoir vos retours :)
    Ah oui comment gérer vos le cache une fois crée par exemple si vous voulez éventuellement l'effacer ou autre, à la main ou avec des fonctions ?

    Merci :)
     
  2. bigjet
    bigjet WRInaute discret
    Inscrit:
    21 Novembre 2004
    Messages:
    175
    J'aime reçus:
    0
    Moi je crée un seul dossier cache sinon c'est la galère pour attribuer les droits de permissions d'écriture dans toys les dossier.
     
  3. mahefarivony
    mahefarivony WRInaute accro
    Inscrit:
    14 Octobre 2002
    Messages:
    8 081
    J'aime reçus:
    0
    je laisse eAccelerator tout gérer, je pense qu'il fait tout ça mieux que moi :)
     
  4. Sir Dipp
    Sir Dipp WRInaute impliqué
    Inscrit:
    21 Juillet 2003
    Messages:
    899
    J'aime reçus:
    0
    Si tu as énormément de pages à mettre en cache je te conseil de le mettre dans un dossier couplé avec des sous-dossiers, sinon tu risques de faire sauter ton FileSystem ;-)

    Sinon en ce qui me concerne, j'ai actuellement un url rewriting, ce qui me permet de créer physiquement la page html.

    Exemple de procédure :

    Rquête http -> Url Rewrite avec check sur le fichier

    Il existe ? Pas de souci on envoi la page à l'utilisateur (html)

    Elle n'existe pas ? On envoi sur un fichier PHP (transparent pour l'utilisateur) celle-ci check sila page existe dans la base de donnée.. c'est le cas ? On crée le fichier html en dur et on laisse aller le visiteur, sinon en renvoi vers une 404 !

    A+
     
  5. ltressens
    ltressens WRInaute occasionnel
    Inscrit:
    2 Avril 2004
    Messages:
    451
    J'aime reçus:
    0
    Je pense que notre ami parle de cacher en fichier les pages générées, ce qui n'est pas la même chose que eAccelerator.

    eAccelerator va permettre une exécution plus rapide du script PHP, mais imaginons que ce dernier fasse une dizaine de requetes complexes a la base de données pour construire la page résultante, eAccelerator ne pourra rien y changer, il faudra cacher le fichier dans un filesystem.
    Si vous avez un dédié avec un peu de RAM, montez dans un répertoire précis un filesystem logé en RAM pour y écrire vos fichiers de cache (un md5 de l'URL par exemple).
    Pkoi en RAM ? Le parcours du répertoire à la recherche d'un fichier en cache, et sa lecture pour le cracher à Apache n'en seront que plus rapide. Et puis, si la machine reboote, ce n'était que du cache, aucun problème...

    Cela dit, eAccelerator est indispensable sur un site à forte charge.
     
  6. Elvis
    Elvis WRInaute discret
    Inscrit:
    20 Mai 2005
    Messages:
    109
    J'aime reçus:
    0
  7. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Salut Chacho.
    Pareil que Elvis, ce petit script est assez simple et pas mal du tout, on peut l'utiliser pour mettre en cache toute la page ou une partie seulement de la page. Je l'utilise pour mettre en cache une partie de certaines pages de mon site qui font appel à une grosse requete sql longue à exécuter.
     
  8. Koxin-L
    Koxin-L WRInaute passionné
    Inscrit:
    29 Mars 2007
    Messages:
    1 532
    J'aime reçus:
    1
    gestion de cache ?

    C'est quoi ça ?




    Ah oui, c'est vrai, j'ai pas encore 10 000 vu/j sur mon site...
     
  9. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    Merci de vos réponse :)
    Moi aussi je me suis inspiré de ce script pour faire mon système de cache. Mais dans ce script toutes les pages sont enregistrées dans le même répertoire :

    Code:
    $fichierCache="cache/cache".$urldemandee; // on construit le chemin du fichier cache de la page 
    Je me dis juste que voilà, si on applique ça sur un nombre important de pages, on va se retrouver avec *beaucoup* de fichiers dans ce dossier. Je me demande donc si vous faites pareil ou pas.

    C'est bien ce que je me dis. Tu crée tes sous-dossiers à la main ou tu laisse ton script de cache le faire ?


    Ce que moi je fait pour l'instant c'est qqchose comme ça :

    Sur ma page qui contient des données à mettre en cache :

    Code:
    (...)
    
    $fcache = '/home/adresse_de_mon_fichier/';
    
    if( fichierCacheARenouveller($fcache,'file_exists') ){
    
       ob_start();
    
    
      // instructions bla bla (...)
    
    
      $cache = ob_get_contents();
      ob_end_flush();
      $fo = fopen($fcache, "w+");
      fwrite($fo,$cache);
      close($fo);
    }
    else{
      include ($fcache);
    }
    
    et ma fonction :

    Code:
    function fichierCacheARenouveller($fichierCache,$duree){
    		if($duree == 'daily' )	     return !file_exists($fichierCache) OR date('N',filemtime($fichierCache)) != date('N'); // cache à renouveller tous les jours
    		if($duree == 'file_exists')  return !file_exists($fichierCache); // cache à créer s'il n'existe pas
    		if(substr($duree,-1) == 'm') return !file_exists($fichierCache) OR filemtime($fichierCache) < ( time() - 60*substr($duree,0,-1) ); // cache à renouveller toutes les X minutes
    }
    Je trouve ça plutôt pratique mais du coup ce que j'aime moins c'est que je dois renseigner une adresse à chaque fois pour le fichier cache. Pour l'instant je ne peux pas prendre le $_SERVER['REQUEST_URI'] pour générer automatiquement une adresse de cache car sur certaines pages, je générè plusieurs fichiers caches.
    Par exemple si sur ma page d'accueil, j'ai les dernières discus du forum ( 1er cache ) et l'agenda de la semaine ( 2ième cache ). Du coup, lorsque un post est rajouté sur le forum, seul le 1er cache est supprimé. Est-ce que c'est la bonne solution ou autant juste mettre en cache toute la page en un fichier ?

    Merci de vos avis, ça me permet aussi de réfléchir en écrivant tout ceci :)
     
  10. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    J'en suis loin mais bon pourquoi pas commencer dès maintenant et faire ça bien dès le début au lieu de (éventuellement :p ) avoir besoin de le faire plus tard à l'arrache :)
     
  11. Koxin-L
    Koxin-L WRInaute passionné
    Inscrit:
    29 Mars 2007
    Messages:
    1 532
    J'aime reçus:
    1
    C'est vrai...

    Je l'ai d'ailleurs fait pour les fil rss, mais c'est tout.
     
  12. Elvis
    Elvis WRInaute discret
    Inscrit:
    20 Mai 2005
    Messages:
    109
    J'aime reçus:
    0
    J'avais pas pensé au problème du nombre de fichiers dans un répertoire, n'ayant même pas une centaine de pages en cache.

    @Chacho
    Ca dépend des pages, si une page présente un contenu qui évolue très vite et qui doit toujours être à jour, l'utilisation du cache s'envisage même pas.

    Mettre tout une page en html c'est bien si le contenu de la page n'évolue que de temps en temps...
    Faire plusieurs caches différents pour une même page je trouve que c'est une bonne solution, ça permet de cibler le raffraichissement du cache, en fonction du besoin de tel ou tel module.
     
  13. medium69
    medium69 WRInaute passionné
    Inscrit:
    7 Mai 2005
    Messages:
    1 940
    J'aime reçus:
    3
    A ce propos, on peut avoir combien de fichiers dans un répertoire sans que cela pose un réel problème avec une recherche ??

    Je pensais que la fonction « travaillait » comme un humain ; ordre alphabétique non ?
     
  14. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    C'est bien ce que je fais pour le moment mais tu vois du coup je suis obligé de rentrer moi-même un nom de fichier pour chaque partie de la page à mettre en cache séparément.
    Alors que si je mets toute la page en 1 cache, je peux utiliser le nom de l'URL pour générer automatiquement un nom de fichier cache.
    Mais bon de tte façon, je préfère plusieurs caches par page, comme ça je peux gérer leur régénération indépendamment de manière automatique avec la fonction fichierCacheARenouveller. Si qqun voit comment générer un nom du fichier automatiquement pour chaque cache d'une même page, je suis preneur :D AMA, c'est mort, il faudrait combiner l'url demandé avec un identifiant qu'on donnerait manuellement.
     
  15. Elvis
    Elvis WRInaute discret
    Inscrit:
    20 Mai 2005
    Messages:
    109
    J'aime reçus:
    0
    Le nom de tes fichiers cache tu les rentres plus ou moins à la main une première fois, la même fois où tu implémentes tes fonctions là où tu en as besoin mais après t'es tranquille.

    Sinon, si c'est trop casse-c**** de tout rentrer à la main, tu peux aussi attribuer un numero automatique à chaque partie d'une page que tu mets en cache en utilisant une variable statique que tu incrémenterais à chaque appel de ta fonction de mise en cache.

    Je pense que ça peut marcher, mais je pense aussi qu'il vaut mieux prendre le soin de nommer explicitement ce qu'on met en cache dans une page pour pouvoir le réutiliser autre part.
     
  16. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    Ouais, je pense pour l'instant ( comme personne d'autre n'a pour l'instant apporté d'idée) que pour éviter trop de fichers dans le répertoire cache, qu'il faut combiner l'URL demandée qu'on utilise pour recréer l'arbo à l'intérieur du dossier cache et un nom donné manuellement pour pouvoir avoir plusieurs fichiers caches par page
     
  17. ltressens
    ltressens WRInaute occasionnel
    Inscrit:
    2 Avril 2004
    Messages:
    451
    J'aime reçus:
    0
    Dans ma réponse, c'est partiellement donné. (un peu caché ok, j'avoue).

    exemple :

    request uri = /fr/products/video.html
    md5 = 274f75a9d303a08c295b318c959bd473
    emplacement cache =
    /home/cache/27/4f/274f75a9d303a08c295b318c959bd473

    la repartition des md5 fait que statistiquement les differents noeuds de l'arboresence cache auront des populations (nb de fichiers) bien reparties, alors que diviser par l'url creera des gros repertoires et des petits.
     
  18. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    Mais si j'ai plusieurs caches par pages et donc par request_uri comment je fais pour créer plusieurs id automatiquement ? Voila mon pb..
     
  19. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Chaco, tes modules mis en cache sont aléatoires? Ou alors ce sont toujours les mêmes, mais associés à des pages différentes ?
     
  20. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    Pour le moment, sur mon www, une page peut être composé ainsi :
    Une partie que je mets en cache et qui n'est régénérée que quand je supprime ce cache ou s'il est supprimé automatiquement par une autre page.
    Une partie qui est mis en cache et maj ttes les heures..
    etc

    Donc comme j'ai des partie que je souhaites mettre à jour à des intervalles différents ( 1h, 1jour, tant qu'une fonction php ne le demande pas etc ), je me suis dis autant faire plusieurs caches soit un cache par partie/module.

    Bon pour prendre un exemple concret sinon je sais pas si je vais réussis à expliquer, sur la page d'accueil de mon www il y a :
    le module "Forum Live" avec les derniers messages qui constitue un fichier cache qui est renouvellé seulement qqun poste/édite un message.
    le module 'Tendance city" qui est mis en cache et renouvelé toutes les heures.
    le module "agenda de la semaine" régénéré toutes les semaines etc..

    Donc du coup, j'ai mis ces modules dans des fichier caches différents. Ca m'évite de mettre la page en entier dans un seul fichier cache et de devoir le renouveler entièrement toutes les heures alors que seule "tendance city" le nécéssite.

    Comme j'ai plusieurs caches par page, je ne peux utiliser l'URL pour générer automatiquement un nom de fichier cache car j'ai plusieurs fichiers caches à nommer. Pour l'instant, je suis obligé de donner un nom manuellement à chaque cache comme je l'ai posté vers le début de ce topic
     
  21. dorian53
    dorian53 WRInaute passionné
    Inscrit:
    10 Avril 2005
    Messages:
    1 886
    J'aime reçus:
    1
    Je pense aussi à utiliser une technique de mise en cache pour la suite car aujourd'hui je n'ai pas encore de limites au niveau des ressources.

    Un truc tout con qui m'empêcherait de mettre la page entière en cache est la gestion de la rotation des régies.

    Si je génère en dur dans le cache une page, elle aura toujours le même tag d'annonces.

    Donc dans ce cas je suis obligé de fragmenter le cache à certain blocs du site et non toute la page.

    Vous n'avez pas ce soucis à gérer de votre coté ?
     
  22. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Si, justement c'est ce dont on parle, la fragmentation du cache :)
     
  23. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 021
    J'aime reçus:
    1
    tu peut éventuellement stocker tes différentes partie du cache en te basant quand même sur l'URL mais en les écrivant dans des dossier différents sur le filesystem. (cache-live, cache-tendance et cache-agenda par exemple)
     
  24. Elvis
    Elvis WRInaute discret
    Inscrit:
    20 Mai 2005
    Messages:
    109
    J'aime reçus:
    0
    zeb, le problème est le même puisque dans ta solution il faut au préalable identifier les caches, en l'occurence avec le nom du répertoire et que chacho voudrait que ça se fasse tout seul.

    Ca pourrait se faire tout seul avec l'utilisation d'une variable statique qui s'incrémenterait à chaque utilisation de ta fonction de cache au sein d'une même page. L'inconvénient c'est qu'on ne peut pas identifier les caches de façon fiable et donc pas les réutiliser autre part.

    Sinon Dorian, je pense pas qu'on puisse faire autrement quand on a pas besoin de tout mettre en cache ( ou plutôt besoin de pas tout mettre en cache :) ).
     
  25. Chacho
    Chacho WRInaute discret
    Inscrit:
    16 Septembre 2007
    Messages:
    72
    J'aime reçus:
    0
    Oui, à part ta solution Elvis ( à laquelle je n'avais pas pensé d'ailleurs :D ) je ne vois pas d'autre mais bon en même tant ce n'est pas si dramatique que ça comme il ne s'agit que de renseigner une variable la première fois et après ça se fait tout seul. C'est pas si terrible faute de mieux.
    J'en suis arrivé à ça :
    Recréer une arbo grâce à l'URL et rajouter un identifiant manuellement à chaque partie de la page mis en cache séparément.

    Pour l'instant, mes fichiers caches se trouve dans le même dossier que la page d'origine. Qu'est-ce qui justifierait de les regrouper dans un dossier cache et d'y recréer l'arbo ensuite ?
    Je voudrais aussi revenir à ma 2ième question, comment gérer vous votre cache une fois crée ? Créez-vous des fonctions pour effacer le cache ou comment ?
     
  26. Elvis
    Elvis WRInaute discret
    Inscrit:
    20 Mai 2005
    Messages:
    109
    J'aime reçus:
    0
    Perso je m'étais fait une petite classe que je peux te donner si ça t'intéresse.

    Elle gère le temps de raffraichissement du cache, le caching de pages avec des arguments dans l'URL. exemple : news.php?id=3.
    Elle permet aussi de raffraichir une page en ajoutant un argument dans l'url. Exemple : news.php?raffraichir_cache

    Je crois que dans le temps j'avais besoin que la suppression s'abatte sur plusieurs fichiers.. Ah oui, c'est parce que j'avais une pagination dans une des parties de mon site, donc quand je rajoutais un enregistrement dans la base, fallait raffraichir la page 1, 2, 3 etc...
     
Chargement...
Similar Threads - [PHP] Gestion fichers Forum Date
[PHP] Gestion des balises title et meta description Développement d'un site Web ou d'une appli mobile 19 Août 2006
[PHP] gestion des sessions Développement d'un site Web ou d'une appli mobile 29 Août 2005
Astuce [PHP] Récolter ville, pays du visiteur Développement d'un site Web ou d'une appli mobile 9 Mars 2021
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 14 Septembre 2019
[PHP] Détecter le navigateur / bot en fonction du HTTP_USER_AGENT Développement d'un site Web ou d'une appli mobile 12 Janvier 2017
[PHP] Cookie vide dans une fonction, complet juste avant ou après Développement d'un site Web ou d'une appli mobile 25 Novembre 2014
[php] Cookie d'un domaine vers un sous-domaine Développement d'un site Web ou d'une appli mobile 29 Août 2014
[PHP]Cci mails Développement d'un site Web ou d'une appli mobile 18 Août 2014
[PHP] gethostbyname Développement d'un site Web ou d'une appli mobile 15 Février 2014
[PHP] file_get_contents retourne un "Connection timed out" Développement d'un site Web ou d'une appli mobile 14 Février 2014
[PHP] Regex Complexe Développement d'un site Web ou d'une appli mobile 29 Octobre 2013
[PHP] Formulaire dynamique Développement d'un site Web ou d'une appli mobile 2 Mai 2013
[php] error suite à code antiduplication Développement d'un site Web ou d'une appli mobile 5 Février 2013
[PHP] Condition et include Développement d'un site Web ou d'une appli mobile 31 Janvier 2013
[PHP] comprendre ce code pour pseudo-frame Développement d'un site Web ou d'une appli mobile 28 Décembre 2012
[PHP] Requête très lente Développement d'un site Web ou d'une appli mobile 22 Septembre 2012
[PHP] Question technique Regex Développement d'un site Web ou d'une appli mobile 28 Juillet 2012
[PHP] file_get_contents sur le serveur même... Développement d'un site Web ou d'une appli mobile 9 Juillet 2012
[PHP] FILTER_VALIDATE_IP et REMOTE_ADDR Développement d'un site Web ou d'une appli mobile 8 Juillet 2012
[PHP] Requête PDO à modifier Développement d'un site Web ou d'une appli mobile 13 Mai 2012