Przeglądaj źródła

split common persistance logic into abstract class

Simon Rupf 12 lat temu
rodzic
commit
badf459390
1 zmienionych plików z 112 dodań i 0 usunięć
  1. 112 0
      lib/persistence.php

+ 112 - 0
lib/persistence.php

@@ -0,0 +1,112 @@
+<?php
+/**
+ * ZeroBin
+ *
+ * a zero-knowledge paste bin
+ *
+ * @link      http://sebsauvage.net/wiki/doku.php?id=php:zerobin
+ * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
+ * @license   http://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
+ * @version   0.17
+ */
+
+/**
+ * persistence
+ *
+ * persists data in PHP files
+ */
+abstract class persistence
+{
+    /**
+     * @access private
+     * @static
+     * @var    string
+     */
+    private static $_path = 'data';
+
+    /**
+     * set the path
+     *
+     * @access public
+     * @static
+     * @param  string $path
+     * @return void
+     */
+    public static function setPath($path)
+    {
+        self::$_path = $path;
+    }
+
+    /**
+     * get the path
+     *
+     * @access public
+     * @static
+     * @param  string $filename
+     * @return void
+     */
+    public static function getPath($filename = null)
+    {
+        if(strlen($filename)) {
+            return self::$_path . '/' . $filename;
+        } else {
+            return self::$_path;
+        }
+    }
+
+    /**
+     * checks if the file exists
+     *
+     * @access protected
+     * @static
+     * @param  string $filename
+     * @return bool
+     */
+    protected static function _exists($filename)
+    {
+        self::_initialize();
+        return is_file(self::$_path . '/' . $filename);
+    }
+
+    /**
+     * prepares path for storage
+     *
+     * @access protected
+     * @static
+     * @return void
+     */
+    protected static function _initialize()
+    {
+        // Create storage directory if it does not exist.
+        if (!is_dir(self::$_path)) mkdir(self::$_path, 0705);
+
+        // Create .htaccess file if it does not exist.
+        $file = self::$_path . '/.htaccess';
+        if (!is_file($file))
+        {
+            file_put_contents(
+                $file,
+                'Allow from none' . PHP_EOL .
+                'Deny from all'. PHP_EOL
+            );
+        }
+    }
+
+    /**
+     * store the data
+     *
+     * @access protected
+     * @static
+     * @param  string $filename
+     * @param  string $data
+     * @return string
+     */
+    protected static function _store($filename, $data)
+    {
+        self::_initialize();
+        $file = self::$_path . '/' . $filename;
+        file_put_contents($file, $data);
+        chmod($file, 0705);
+        return $file;
+    }
+}