flightphp/cache
Light, simple and standalone PHP in-file caching class forked from Wruczek/PHP-File-Cache
Advantages
- Light, standalone and simple
- All code in one file - no pointless drivers.
- Secure - every generated cache file have a php header with die, making direct access impossible even if someone knows the path and your server is not configured properly
- Well documented and tested
- Handles concurrency correctly via flock
- Supports PHP 7.4+
- Free under a MIT license
This docs site is using this library to cache each of the pages!
Click here to view the code.
Installation
Install via composer:
composer require flightphp/cache
Usage
Usage is fairly straightforward. This saves a cache file in the cache directory.
use flight\Cache;
$app = Flight::app();
// You pass the directory the cache will be stored in into the constructor
$app->register('cache', Cache::class, [ __DIR__ . '/../cache/' ], function(Cache $cache) {
// This ensures that the cache is only used when in production mode
// ENVIRONMENT is a constant that is set in your bootstrap file or elsewhere in your app
$cache->setDevMode(ENVIRONMENT === 'development');
});
Get a Cache Value
You use the get()
method to get a cached value. If you want a convenience method that will refresh the cache if it is expired, you can use refreshIfExpired()
.
// Get cache instance
$cache = Flight::cache();
$data = $cache->refreshIfExpired('simple-cache-test', function () {
return date("H:i:s"); // return data to be cached
}, 10); // 10 seconds
// or
$data = $cache->get('simple-cache-test');
if(empty($data)) {
$data = date("H:i:s");
$cache->set('simple-cache-test', $data, 10); // 10 seconds
}
Store a Cache Value
You use the set()
method to store a value in the cache.
Flight::cache()->set('simple-cache-test', 'my cached data', 10); // 10 seconds
Erase a Cache Value
You use the delete()
method to erase a value in the cache.
Flight::cache()->delete('simple-cache-test');
Check if a Cache Value Exists
You use the exists()
method to check if a value exists in the cache.
if(Flight::cache()->exists('simple-cache-test')) {
// do something
}
Pull out meta data with cache
If you want to pull out timestamps and other meta data about a cache entry, make sure you pass true
as the correct parameter.
$data = $cache->refreshIfExpired("simple-cache-meta-test", function () {
echo "Refreshing data!" . PHP_EOL;
return date("H:i:s"); // return data to be cached
}, 10, true); // true = return with metadata
// or
$data = $cache->get("simple-cache-meta-test", true); // true = return with metadata
/*
Example cached item retrieved with metadata:
{
"time":1511667506, <-- save unix timestamp
"expire":10, <-- expire time in seconds
"data":"04:38:26", <-- unserialized data
"permanent":false
}
Using metadata, we can, for example, calculate when item was saved or when it expires
We can also access the data itself with the "data" key
*/
$expiresin = ($data["time"] + $data["expire"]) - time(); // get unix timestamp when data expires and subtract current timestamp from it
$cacheddate = $data["data"]; // we access the data itself with the "data" key
echo "Latest cache save: $cacheddate, expires in $expiresin seconds";
Documentation
Visit https://github.com/flightphp/cache to view the code. Make sure you see the examples folder for additional ways to use the cache.