Refactoring classes into src/ folder, so they will be auto-loaded by composer

This commit is contained in:
slawkens
2024-01-27 00:36:49 +01:00
parent 410d75c882
commit 1a6fb8bee2
78 changed files with 439 additions and 341 deletions

56
system/src/Cache/APC.php Normal file
View File

@@ -0,0 +1,56 @@
<?php
/**
* Cache APC class
*
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @author Mark Samman (Talaturen) <marksamman@gmail.com>
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
namespace MyAAC\Cache;
class APC
{
private $prefix;
private $enabled;
public function __construct($prefix = '')
{
$this->prefix = $prefix;
$this->enabled = function_exists('apc_fetch');
}
public function set($key, $var, $ttl = 0)
{
$key = $this->prefix . $key;
apc_delete($key);
apc_store($key, $var, $ttl);
}
public function get($key)
{
$tmp = '';
if ($this->fetch($this->prefix . $key, $tmp)) {
return $tmp;
}
return '';
}
public function fetch($key, &$var)
{
return ($var = apc_fetch($this->prefix . $key)) !== false;
}
public function delete($key)
{
apc_delete($this->prefix . $key);
}
public function enabled()
{
return $this->enabled;
}
}

56
system/src/Cache/APCu.php Normal file
View File

@@ -0,0 +1,56 @@
<?php
/**
* Cache APC class
*
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @author Mark Samman (Talaturen) <marksamman@gmail.com>
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
namespace MyAAC\Cache;
class APCu
{
private $prefix;
private $enabled;
public function __construct($prefix = '')
{
$this->prefix = $prefix;
$this->enabled = function_exists('apcu_fetch');
}
public function set($key, $var, $ttl = 0)
{
$key = $this->prefix . $key;
apcu_delete($key);
apcu_store($key, $var, $ttl);
}
public function get($key)
{
$tmp = '';
if ($this->fetch($this->prefix . $key, $tmp)) {
return $tmp;
}
return '';
}
public function fetch($key, &$var)
{
return ($var = apcu_fetch($this->prefix . $key)) !== false;
}
public function delete($key)
{
apcu_delete($this->prefix . $key);
}
public function enabled()
{
return $this->enabled;
}
}

128
system/src/Cache/Cache.php Normal file
View File

@@ -0,0 +1,128 @@
<?php
/**
* Cache class
*
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @author Mark Samman (Talaturen) <marksamman@gmail.com>
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
namespace MyAAC\Cache;
/**
* Class Cache
*
* @method set($key, $var, $ttl = 0)
* @method get($key)
* @method fetch($key, &$var)
* @method delete($key)
*/
class Cache
{
static private $instance;
/**
* @return Cache
*/
public static function getInstance()
{
if (!self::$instance) {
return self::generateInstance(config('cache_engine'), config('cache_prefix'));
}
return self::$instance;
}
/**
* @param string $engine
* @param string $prefix
* @return Cache
*/
public static function generateInstance($engine = '', $prefix = '')
{
if (config('env') === 'dev') {
self::$instance = new self();
return self::$instance;
}
switch (strtolower($engine)) {
case 'apc':
self::$instance = new APC($prefix);
break;
case 'apcu':
self::$instance = new APCu($prefix);
break;
case 'eaccelerator':
self::$instance = new eAccelerator($prefix);
break;
case 'xcache':
self::$instance = new XCache($prefix);
break;
case 'file':
self::$instance = new File($prefix, CACHE);
break;
case 'php':
self::$instance = new PHP($prefix, CACHE);
break;
case 'auto':
self::$instance = self::generateInstance(self::detect(), $prefix);
break;
default:
self::$instance = new self();
break;
}
return self::$instance;
}
/**
* @return string
*/
public static function detect()
{
if (function_exists('apc_fetch'))
return 'apc';
else if (function_exists('apcu_fetch'))
return 'apcu';
else if (function_exists('eaccelerator_get'))
return 'eaccelerator';
else if (function_exists('xcache_get') && ini_get('xcache.var_size'))
return 'xcache';
return 'file';
}
/**
* @return bool
*/
public function enabled()
{
return false;
}
public static function remember($key, $ttl, $callback)
{
$cache = self::getInstance();
if (!$cache->enabled()) {
return $callback();
}
$value = null;
if ($cache->fetch($key, $value)) {
return unserialize($value);
}
$value = $callback();
$cache->set($key, serialize($value), $ttl);
return $value;
}
}

View File

@@ -0,0 +1,56 @@
<?php
/**
* Cache eAccelerator class
*
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @author Mark Samman (Talaturen) <marksamman@gmail.com>
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
namespace MyAAC\Cache;
class EAccelerator
{
private $prefix;
private $enabled;
public function __construct($prefix = '')
{
$this->prefix = $prefix;
$this->enabled = function_exists('eaccelerator_get');
}
public function set($key, $var, $ttl = 0)
{
$key = $this->prefix . $key;
eaccelerator_rm($key);
eaccelerator_put($key, $var, $ttl);
}
public function get($key)
{
$tmp = '';
if ($this->fetch($this->prefix . $key, $tmp)) {
return $tmp;
}
return '';
}
public function fetch($key, &$var)
{
return ($var = eaccelerator_get($this->prefix . $key)) !== null;
}
public function delete($key)
{
eaccelerator_rm($this->prefix . $key);
}
public function enabled()
{
return $this->enabled;
}
}

76
system/src/Cache/File.php Normal file
View File

@@ -0,0 +1,76 @@
<?php
/**
* File cache class
*
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
namespace MyAAC\Cache;
class File
{
private $prefix;
private $dir;
private $enabled;
public function __construct($prefix = '', $dir = '')
{
$this->prefix = $prefix;
$this->dir = $dir;
$this->enabled = (file_exists($this->dir) && is_dir($this->dir) && is_writable($this->dir));
}
public function set($key, $var, $ttl = 0)
{
$file = $this->_name($key);
file_put_contents($file, $var);
if ($ttl === 0) {
$ttl = 365 * 24 * 60 * 60; // 365 days
}
touch($file, time() + $ttl);
}
public function get($key)
{
$tmp = '';
if ($this->fetch($key, $tmp)) {
return $tmp;
}
return '';
}
public function fetch($key, &$var)
{
$file = $this->_name($key);
if (!file_exists($file) || filemtime($file) < time()) {
return false;
}
$var = file_get_contents($file);
return true;
}
public function delete($key)
{
$file = $this->_name($key);
if (file_exists($file)) {
unlink($file);
}
}
public function enabled()
{
return $this->enabled;
}
private function _name($key)
{
return sprintf('%s%s%s', $this->dir, $this->prefix, sha1($key));
}
}

83
system/src/Cache/PHP.php Normal file
View File

@@ -0,0 +1,83 @@
<?php
/**
* PHP cache class
*
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
namespace MyAAC\Cache;
class PHP
{
private $prefix;
private $dir;
private $enabled;
public function __construct($prefix = '', $dir = '')
{
$this->prefix = $prefix;
$this->dir = $dir;
$this->enabled = (file_exists($this->dir) && is_dir($this->dir) && is_writable($this->dir));
}
public function set($key, $var, $ttl = 0)
{
$var = var_export($var, true);
// Write to temp file first to ensure atomicity
$tmp = $this->dir . "tmp_$key." . uniqid('', true) . '.tmp';
file_put_contents($tmp, '<?php $var = ' . $var . ';', LOCK_EX);
$file = $this->_name($key);
rename($tmp, $file);
if ($ttl === 0) {
$ttl = 365 * 24 * 60 * 60; // 365 days
}
touch($file, time() + $ttl);
}
public function get($key)
{
$tmp = '';
if ($this->fetch($key, $tmp)) {
return $tmp;
}
return '';
}
public function fetch($key, &$var)
{
$file = $this->_name($key);
if (!file_exists($file) || filemtime($file) < time()) {
return false;
}
@include $file;
$var = isset($var) ? $var : null;
return true;
}
public function delete($key)
{
$file = $this->_name($key);
if (file_exists($file)) {
unlink($file);
}
}
public function enabled()
{
return $this->enabled;
}
private function _name($key)
{
return sprintf('%s%s%s', $this->dir, $this->prefix, sha1($key) . '.php');
}
}

View File

@@ -0,0 +1,62 @@
<?php
/**
* XCache class
*
* @package MyAAC
* @author Slawkens <slawkens@gmail.com>
* @author Mark Samman (Talaturen) <marksamman@gmail.com>
* @copyright 2019 MyAAC
* @link https://my-aac.org
*/
namespace MyAAC\Cache;
class XCache
{
private $prefix;
private $enabled;
public function __construct($prefix = '')
{
$this->prefix = $prefix;
$this->enabled = function_exists('xcache_get') && ini_get('xcache.var_size');
}
public function set($key, $var, $ttl = 0)
{
$key = $this->prefix . $key;
xcache_unset($key);
xcache_set($key, $var, $ttl);
}
public function get($key)
{
$tmp = '';
if ($this->fetch($this->prefix . $key, $tmp)) {
return $tmp;
}
return '';
}
public function fetch($key, &$var)
{
$key = $this->prefix . $key;
if (!xcache_isset($key)) {
return false;
}
$var = xcache_get($key);
return true;
}
public function delete($key)
{
xcache_unset($this->prefix . $key);
}
public function enabled()
{
return $this->enabled;
}
}