IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] système de cache côté script


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut [Système] système de cache côté script
    Bonjour à tous,

    J'essaie de trouver un moyen de générer automatiquement les pages en cache, et que ce ne soit pas le client qui génère les pages.
    A chaque mise à jour de la BDD, un script génère certaines pages en cache.
    Comment faire pour appeler des pages (avec paramètres POST, GET) et générer le résultat sans passer par le navigateur? Les principaux systèmes de cache font appel à la bufferisation de sortie (ob_start...) et un envoi du résultat au navigateur, puisque c'est le client qui génère lui-même le cache...

    Là, je bloque un peu... Merci pour vos éclaircissements.
    C'est curieux chez les marins ce besoin de faire des phrases !

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    A chaque mise à jour de la BDD, un script génère certaines pages en cache.
    Je ne comprends pas trop le problème. Tu pars de zero ? Tu utilise déjà un système de cache ?

    Ecrire une chaine de caractère dans un fichier ne requiert pas l'utilisation de ob_xxxx...

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    puisque c'est le client qui génère lui-même le cache...
    Attention, en te relisant, j'ai l'impression que tu confond cache client et cache serveur.
    Les deux permettent de gagner du temps d'attente pour l'utilisateur, mais :
    Le cache client est là pour économiser de la bande passante. Le navigateur stocke une copie de la page récupérée et au prochain appel affiche la copie plutot que de refaire une requete longue vers le serveur.
    Le cache serveur est là pour économiser du cpu coté serveur : au lieu d'interroger la bd, de faire des tris couteux à chaque appel, on envoi le code html mis en cache. Ce cache peut etre généré de deux façons :
    - à la volée, à la première requête
    - dynamiquement lors d'une modification de la db

    La premiere solution a l'avantage d'etre plus simple à mettre en place mais requiert l'utilisation de timers qui ne seront pas forcément ad-hoc (pourquoi une page expirerait-elle forcément dans 24h ?). Alors que la deuxième permet d'avoir une granularité plus fine...

  4. #4
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Merci pour ta réponse,
    Je m'aperçoit que je n'ai pas été très clair dans mon message.

    Mon problème :
    j'ai une base de données très grosse (+de 3 millions d'enregistrements par mois) et les requêtes sont très gourmandes.
    J'ai fait un premier système de cache (jpcache) mais ça ne me satisfait pas parceque le 1er client attend 3 minutes sa page...
    La page doit être mise à jour en temps réel (c'est de la facturation et de l'affichage des encours clients).
    L'idée est que la classe qui génère la facturation génère/mette à jour également le cache. Le système de fichiers en cache semble plus rapide qu'un cache dans la base de données, donc ça me plait bien.
    Mais je ne vois pas comment générer automatiquement ces pages...Un système tel que jpcache ne semble pas approprié.
    C'est curieux chez les marins ce besoin de faire des phrases !

  5. #5
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Citation Envoyé par Mr N.
    Le cache serveur est là pour économiser du cpu coté serveur : au lieu d'interroger la bd, de faire des tris couteux à chaque appel, on envoi le code html mis en cache. Ce cache peut etre généré de deux façons :
    - à la volée, à la première requête
    - dynamiquement lors d'une modification de la db
    Ce que je voudrais faire ressemble beaucoup à ta 2ème solution (à chaque modification de la BDD).
    C'est curieux chez les marins ce besoin de faire des phrases !

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    show.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php 
    include '/path/to/cache.html';
    ?>
    edit.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?php
     
    //Handle request
    query("UPDATE my_table SET field = '". $_REQUEST['new_val'] ."'");
     
    //Build cache
    $html = '<html><body><table>';
    $res = query("SELECT * FROM my_table");
    while($data in $res) {
       $html .= '<tr><td>'. $data['field'] .'</td></tr>';
    }
    $html .= '</table></body></html>';
    file_put_contents('/path/to/cache.html', $html);
    ?>

  7. #7
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    C'est exactement ce que je veux faire.
    Reste un petit truc :

    je pense appeler ma page php qui me renverra le flux html comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $handle = fopen("http://monUrl/mapage.php?mesParamsGet", "rb");
    $html= '';
    while (!feof($handle)) {
      $html .= fread($handle, 8192);
    }
    fclose ($handle);
    file_put_contents('/path/to/cache.html', $html);
    Ce qui me permet de ne pas avoir à réécrire le script qui va générer la page en cache.
    Cette page php qui va générer certaines pages en cache sera pour le client:
    -soit elle restera dynamique pour des requêtes spécifiques.
    -soit elle redirigera vers les pages en cache pour les requêtes communes.

    Donc c'est une page php qui sera appelée soit par le client, soit par le script qui génèrera le cache.
    Mais comment à la génération auto du cache appeler cette même page avec des paramètres en post, pour en récupérer le flux html ?
    C'est curieux chez les marins ce besoin de faire des phrases !

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Utilise snoopy, curl ou les sockets pour générer des requetes post.

    Sinon pour les requetes get, ce code sera plus concis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents('/path/to/cache', file_get_contents('http://monUrl/mapage.php?mesParamsGet'));
    Attention à autoriser la famille fopen à acceder à un fichier distant...

  9. #9
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Effectivement, pour le GET, ton code est carrément plus propre.
    Pour le POST, je vais m'orienter vers une des solutions que tu proposes.

    Merci pour tes réponses, je pense que j'ai ma solution.
    Le tag "résolu" ne devrait pas tarder à suivre
    C'est curieux chez les marins ce besoin de faire des phrases !

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    A savoir aussi qu'en utilisant $_REQUEST à la place de $_GET et $_POST, tu peux appeler indifféremment une page avec l'une ou l'autre des methodes...

  11. #11
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Excellent.
    Je fais tout avec les sockets, c'est facile à mettre en place et ça me donne exactement ce que je recherchais.

    Encore merci pour le dépannage, Mr N.
    C'est curieux chez les marins ce besoin de faire des phrases !

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ah ben c'est bien la première fois que j'entends "excellent" et "c'est facile à mettre en place" quand on parle de sockets

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] execution automatique d'un script php.
    Par ghostdog dans le forum Langage
    Réponses: 7
    Dernier message: 31/05/2006, 16h06
  2. [Système] Clic bouton => Executer un script
    Par emstar dans le forum Langage
    Réponses: 2
    Dernier message: 20/04/2006, 15h46
  3. [Système] Droit d'écriture via script php
    Par winnie82 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 11h40
  4. [cache système] priorité au cache = performances ?
    Par FFF dans le forum Windows XP
    Réponses: 5
    Dernier message: 04/01/2006, 20h46
  5. [Système] temps d'éxécution de script
    Par clara2005 dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo