84 lines
1.5 KiB
PHP
84 lines
1.5 KiB
PHP
<?php
|
|
|
|
class FileStorage {
|
|
|
|
public $shoutLog, $path, $handle;
|
|
|
|
function FileStorage($path, $shoutLog = false) {
|
|
$this->shoutLog = $shoutLog;
|
|
$folder = 'logs';
|
|
if (!is_dir($folder)) $folder = '../' . $folder;
|
|
if (!is_dir($folder)) $folder = '../' . $folder;
|
|
|
|
$this->path = $folder . '/' . $path . '.txt';
|
|
}
|
|
|
|
function open($lock = false) {
|
|
$this->handle = fopen($this->path, 'a+');
|
|
|
|
if ($lock) {
|
|
$this->lock();
|
|
return $this->load();
|
|
}
|
|
}
|
|
|
|
function close(&$array) {
|
|
if (isset($array))
|
|
$this->save($array);
|
|
|
|
$this->unlock();
|
|
fclose($this->handle);
|
|
unset($this->handle);
|
|
}
|
|
|
|
function load() {
|
|
if (($contents = $this->read($this->path)) == null)
|
|
return $this->resetArray();
|
|
|
|
return unserialize($contents);
|
|
}
|
|
|
|
function save(&$array, $unlock = true) {
|
|
$contents = serialize($array);
|
|
$this->write($contents);
|
|
if ($unlock) $this->unlock();
|
|
}
|
|
|
|
function unlock() {
|
|
if (isset($this->handle))
|
|
flock($this->handle, LOCK_UN);
|
|
}
|
|
|
|
function lock() {
|
|
if (isset($this->handle))
|
|
flock($this->handle, LOCK_EX);
|
|
}
|
|
|
|
function read() {
|
|
fseek($this->handle, 0);
|
|
//return stream_get_contents($this->handle);
|
|
return file_get_contents($this->path);
|
|
}
|
|
|
|
function write($contents) {
|
|
ftruncate($this->handle, 0);
|
|
fwrite($this->handle, $contents);
|
|
}
|
|
|
|
function resetArray() {
|
|
if ($this->shoutLog)
|
|
$default = array(
|
|
'info' => array(
|
|
'latestTimestamp' => -1
|
|
),
|
|
|
|
'posts' => array()
|
|
);
|
|
else
|
|
$default = array();
|
|
|
|
$this->save($default, false);
|
|
return $default;
|
|
}
|
|
}
|
|
|