Code Monkey home page Code Monkey logo

Comments (1)

tcdent avatar tcdent commented on July 25, 2024

This isn't something I would incorporate into the library directly, but here's a simple filesystem cache that I have used before:

<?php

define('CACHE_EXT', ".phpc");
define('CACHE_PATH', realpath("cache").'/');
define('CACHE_PERMISSIONS', 0766);


class Cache {

    public $key;
    public $data = NULL;

    public static function set_permissions(){
        if(substr(decoct(fileperms(CACHE_PATH)), 1) !== CACHE_PERMISSIONS)
            @chmod(CACHE_PATH, CACHE_PERMISSIONS);
    }

    public function __construct($key){
        $this->key = $key;
    }

    public function filename(){
        return CACHE_PATH . $this->key . CACHE_EXT;
    }

    public function get(){
        return ($this->data)? $this->data : $this->read_data();
    }

    public function read_data(){
        if(!$this->exists())
            return FALSE;
        $this->data = unserialize(file_get_contents($this->filename()));
        return $this->data;
    }

    public function put($data){
        $this->data = $data;
        return $this->write_data();
    }

    public function write_data(){
        if($file = fopen($this->filename(), 'w+')){
            fwrite($file, serialize($this->data));
            fclose($file);
            return TRUE;
        }
        return FALSE;
    }

    public function exists(){
        return file_exists($this->filename());
    }

    public function age(){
        return $this->exists()? (time() - filemtime($this->filename())) : NULL;
    }
}

You'd use it something like this:

define('CACHE_AGE', 360);

$api = new RestClient;
$cache = new Cache('__default__');

if($cache->age() > CACHE_AGE){
    $posts = $api->get('posts');
    $cache->put($posts);
}
else {
    $posts = $cache->get();
}

from php-restclient.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.