aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib.php106
1 files changed, 106 insertions, 0 deletions
diff --git a/lib.php b/lib.php
index 28b72cf..600f97d 100644
--- a/lib.php
+++ b/lib.php
@@ -1,6 +1,112 @@
<?php
// definition
+class NCache
+{
+ function __construct() { }
+
+ /**
+ * Factory.
+ *
+ * @param string $path where cache file store is located, relative to app path.
+ * @param integer $timeout in seconds
+ *
+ * @return NCache
+ */
+ function build($path, $timeout = 3600)
+ {
+ $path = __DIR__ . '/' . $path;
+
+ if (!is_dir($path))
+ return null;
+
+ if ($timeout < 60)
+ $timeout = 60;
+
+ $i = new self;
+ $i->_path = $path;
+ $i->_timeout = $timeout;
+
+ return $i;
+ }
+
+ /**
+ * Get value for $key.
+ *
+ * @param mixed $key
+ *
+ * @return mixed
+ */
+ function get($key = null)
+ {
+ if (is_null($key))
+ return false;
+
+ $filename = $this->_get_filename($key);
+
+ if ($this->_is_valid_file($filename, $this->_timeout)) {
+ return unserialize(file_get_contents($filename));
+ }
+
+ return null;
+ }
+
+ /**
+ * Save $value under $key.
+ *
+ * @param mixed $key
+ * @param mixed $value
+ */
+ function set($key, $value)
+ {
+ if (is_null($key))
+ return false;
+
+ $filename = $this->_get_filename($key);
+ file_put_contents($filename, serialize($value));
+
+ return true;
+ }
+
+ /**
+ * Get cache file from key.
+ *
+ * @param mixed $key
+ *
+ * @return string
+ */
+ private function _get_filename($key)
+ {
+ $key = hash('sha1', serialize($key));
+
+ return $this->_path . '/' . $key . '.cache';
+ }
+
+ /**
+ * Check that the cache file exists and has not expired.
+ *
+ * @param string $filename
+ *
+ * @return boolean
+ */
+ private function _is_valid_file($filename, $timeout)
+ {
+ if (!file_exists($filename)) {
+ //error_log(sprintf('Could not find %s', $filename), 0);
+ return false;
+ }
+
+ if (filemtime($filename) + $timeout < time()) {
+ //error_log(sprintf('%s timestamp expired (timeout was %ds.).', $filename, $timeout));
+ unlink($filename);
+ return false;
+ }
+
+ //error_log(sprintf('Found %s', $filename));
+ return true;
+ }
+}
+
class l10n
{
public static $t;