<?php /** * PrivateBin * * a zero-knowledge paste bin * * @link https://github.com/PrivateBin/PrivateBin * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net) * @license https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License * @version 1.3.5 */ namespace PrivateBin\Persistence; use Exception; use PrivateBin\Json; /** * DataStore * * Handles data storage for Data\Filesystem. */ class DataStore extends AbstractPersistence { /** * first line in file, to protect its contents * * @const string */ const PROTECTION_LINE = '<?php http_response_code(403); /*'; /** * store the data * * @access public * @static * @param string $filename * @param array $data * @return bool */ public static function store($filename, $data) { $path = self::getPath(); if (strpos($filename, $path) === 0) { $filename = substr($filename, strlen($path)); } try { self::_store( $filename, self::PROTECTION_LINE . PHP_EOL . Json::encode($data) ); return true; } catch (Exception $e) { return false; } } /** * get the data * * @access public * @static * @param string $filename * @return array|false $data */ public static function get($filename) { return Json::decode( substr( file_get_contents($filename), strlen(self::PROTECTION_LINE . PHP_EOL) ) ); } /** * rename a file, prepending the protection line at the beginning * * @access public * @static * @param string $srcFile * @param string $destFile * @param string $prefix (optional) * @return void */ public static function prependRename($srcFile, $destFile, $prefix = '') { // don't overwrite already converted file if (!is_readable($destFile)) { $handle = fopen($srcFile, 'r', false, stream_context_create()); file_put_contents($destFile, $prefix . self::PROTECTION_LINE . PHP_EOL); file_put_contents($destFile, $handle, FILE_APPEND); fclose($handle); } unlink($srcFile); } }