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 :

Gestion d'un cache avec ob_start() et flock()


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de raffa
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 194
    Points : 159
    Points
    159
    Par défaut Gestion d'un cache avec ob_start() et flock()
    Bonjour,
    j'ai créé un système de cache rudimentaire pour un petit site, mais j'ai un problème avec la fonction flock() .
    On m'a dit que le verrouillage étai mal placé sur ce script, que j'avais locké au mauvais endroit. mais je ne vois pas...

    Voici le script:

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    <?php
    // SYSTEME DE CACHE
     
    // Début du CACHE
    $dCache = './cache/cache_';
    $url = trim(strip_tags(md5($_SERVER['REQUEST_URI'])));
    $fCache = $dCache.$url; 
     
    if(@filemtime($fCache) < time()-360) // time()-(3600*24*365.25) Un an
    { 
      ob_start();
     
     
     
    	// PAGE A METTRE EN CACHE ICI
     
     
     
    	// Fin du CACHE
      $cCache = ob_get_contents();
      ob_end_flush();
     
      $fd = fopen($fCache, 'wb'); // on ouvre le fichier cache
     
      if (flock($fd, LOCK_EX))  // On place un verrou exclusif
      {
    		fwrite($fd, $cCache);
    		flock($fd, LOCK_UN); // On libère le verrou exclusif/partagé
      }
    	else 
    	{
    		echo "Impossible de verrouiller le fichier !";
    	}
    		fclose($fd);
    } 
    else 
    { 
      include($fCache);
    }
    ?>

  2. #2
    Membre habitué Avatar de raffa
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 194
    Points : 159
    Points
    159
    Par défaut
    Résolu
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?php
    $dCache = './cache/';
    $url = trim(strip_tags(md5($_SERVER['REQUEST_URI'])));
    $fCache = $dCache.$url.'.cache'; 
     
    if(@filemtime($fCache) < time()-3600*24*365.25) // -> Si cache périmé : 
    { 
      $fd = fopen($fCache, 'wb');
     
      if(flock($fd, LOCK_EX|LOCK_NB)) // juste le premier entre
      {
        ob_start();
     
     
       // PAGE A METTRE EN CACHE ICI
     
     
        // SECONDE PARTIE
        fwrite($fd, $r = ob_get_clean());
        fclose($fd);
     
      echo $r;
      exit(); 
      }
      else
      { 
        flock($fd, LOCK_SH); // le 14 sont en attente de fabrication 
      }
      @fclose($fd);
    }
    else
    {
      include($fCache); // * On envoi
    }
    ?>

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

Discussions similaires

  1. Gestion du cache avec sessionStorage, et les metas cachecontrol
    Par 4urelien.jo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/06/2015, 09h45
  2. [Qt WebKit] Gestion du cache
    Par chrtophe dans le forum Moteurs Web
    Réponses: 1
    Dernier message: 20/11/2014, 21h02
  3. Gestion du cache avec ADO
    Par Slyteck dans le forum Bases de données
    Réponses: 3
    Dernier message: 30/08/2011, 19h39
  4. Réponses: 0
    Dernier message: 03/06/2010, 14h15
  5. [CVS]Gestion de 2 versions avec une partie commune
    Par Gromitou dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 19/02/2004, 14h32

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