diff options
Diffstat (limited to 'app/Core/ObjectStorage')
| -rw-r--r-- | app/Core/ObjectStorage/FileStorage.php | 150 | ||||
| -rw-r--r-- | app/Core/ObjectStorage/ObjectStorageException.php | 9 | ||||
| -rw-r--r-- | app/Core/ObjectStorage/ObjectStorageInterface.php | 68 | 
3 files changed, 227 insertions, 0 deletions
diff --git a/app/Core/ObjectStorage/FileStorage.php b/app/Core/ObjectStorage/FileStorage.php new file mode 100644 index 00000000..66c62334 --- /dev/null +++ b/app/Core/ObjectStorage/FileStorage.php @@ -0,0 +1,150 @@ +<?php + +namespace Core\ObjectStorage; + +/** + * Local File Storage + * + * @package  ObjectStorage + * @author   Frederic Guillot + */ +class FileStorage implements ObjectStorageInterface +{ +    /** +     * Base path +     * +     * @access private +     * @var string +     */ +    private $path = ''; + +    /** +     * Constructor +     * +     * @access public +     * @param  string  $path +     */ +    public function __construct($path) +    { +        $this->path = $path; +    } + +    /** +     * Fetch object contents +     * +     * @access public +     * @param  string  $key +     * @return string +     */ +    public function get($key) +    { +        $filename = $this->path.DIRECTORY_SEPARATOR.$key; + +        if (! file_exists($filename)) { +            throw new ObjectStorageException('File not found: '.$filename); +        } + +        return file_get_contents($filename); +    } + +    /** +     * Save object +     * +     * @access public +     * @param  string  $key +     * @param  string  $blob +     * @return string +     */ +    public function put($key, &$blob) +    { +        $this->createFolder($key); + +        if (file_put_contents($this->path.DIRECTORY_SEPARATOR.$key, $blob) === false) { +            throw new ObjectStorageException('Unable to write the file: '.$this->path.DIRECTORY_SEPARATOR.$key); +        } +    } + +    /** +     * Output directly object content +     * +     * @access public +     * @param  string  $key +     */ +    public function passthru($key) +    { +        $filename = $this->path.DIRECTORY_SEPARATOR.$key; + +        if (! file_exists($filename)) { +            throw new ObjectStorageException('File not found: '.$filename); +        } + +        return readfile($filename); +    } + +    /** +     * Move local file to object storage +     * +     * @access public +     * @param  string  $filename +     * @param  string  $key +     * @return boolean +     */ +    public function moveFile($src_filename, $key) +    { +        $this->createFolder($key); +        $dst_filename = $this->path.DIRECTORY_SEPARATOR.$key; + +        if (! rename($src_filename, $dst_filename)) { +            throw new ObjectStorageException('Unable to move the file: '.$src_filename.' to '.$dst_filename); +        } + +        return true; +    } + +    /** +     * Move uploaded file to object storage +     * +     * @access public +     * @param  string  $filename +     * @param  string  $key +     * @return boolean +     */ +    public function moveUploadedFile($filename, $key) +    { +        $this->createFolder($key); +        return move_uploaded_file($filename, $this->path.DIRECTORY_SEPARATOR.$key); +    } + +    /** +     * Remove object +     * +     * @access public +     * @param  string  $key +     * @return boolean +     */ +    public function remove($key) +    { +        $filename = $this->path.DIRECTORY_SEPARATOR.$key; + +        if (file_exists($filename)) { +            return unlink($filename); +        } + +        return false; +    } + +    /** +     * Create object folder +     * +     * @access private +     * @param  string  $key +     */ +    private function createFolder($key) +    { +        $folder = $this->path.DIRECTORY_SEPARATOR.dirname($key); + +        if (! is_dir($folder) && ! mkdir($folder, 0755, true)) { +            throw new ObjectStorageException('Unable to create folder: '.$folder); +        } +    } +} diff --git a/app/Core/ObjectStorage/ObjectStorageException.php b/app/Core/ObjectStorage/ObjectStorageException.php new file mode 100644 index 00000000..e89aeb25 --- /dev/null +++ b/app/Core/ObjectStorage/ObjectStorageException.php @@ -0,0 +1,9 @@ +<?php + +namespace Core\ObjectStorage; + +use Exception; + +class ObjectStorageException extends Exception +{ +} diff --git a/app/Core/ObjectStorage/ObjectStorageInterface.php b/app/Core/ObjectStorage/ObjectStorageInterface.php new file mode 100644 index 00000000..5440cf2b --- /dev/null +++ b/app/Core/ObjectStorage/ObjectStorageInterface.php @@ -0,0 +1,68 @@ +<?php + +namespace Core\ObjectStorage; + +/** + * Object Storage Interface + * + * @package  ObjectStorage + * @author   Frederic Guillot + */ +interface ObjectStorageInterface +{ +    /** +     * Fetch object contents +     * +     * @access public +     * @param  string  $key +     * @return string +     */ +    public function get($key); + +    /** +     * Save object +     * +     * @access public +     * @param  string  $key +     * @param  string  $blob +     * @return string +     */ +    public function put($key, &$blob); + +    /** +     * Output directly object content +     * +     * @access public +     * @param  string  $key +     */ +    public function passthru($key); + +    /** +     * Move local file to object storage +     * +     * @access public +     * @param  string  $filename +     * @param  string  $key +     * @return boolean +     */ +    public function moveFile($filename, $key); + +    /** +     * Move uploaded file to object storage +     * +     * @access public +     * @param  string  $filename +     * @param  string  $key +     * @return boolean +     */ +    public function moveUploadedFile($filename, $key); + +    /** +     * Remove object +     * +     * @access public +     * @param  string  $key +     * @return boolean +     */ +    public function remove($key); +}  | 
