tristram
Guest
трабла со скриптом! выручите!
скрипт преднозначен для удобной записи обьектов/массивов в текстовики и получения обратно, также умеет пихать в base64 и обратно (чтоб никто не догодался).
openstream - открытие файла
closestream - закрытие файла
load - открытие и загрузка из файла в массив $this->db
flush - запись в файл массива $this->db
unload - закрытие файла и очищение $this->fp
при открытие происходит блокировка (flock).
в файл пишет нормально без проблем, но $this->db остается пустым после load() на записанный файл.
у меня не настолько много опыта что бы сходу увидеть решение траблы!
скрипт преднозначен для удобной записи обьектов/массивов в текстовики и получения обратно, также умеет пихать в base64 и обратно (чтоб никто не догодался).
openstream - открытие файла
closestream - закрытие файла
load - открытие и загрузка из файла в массив $this->db
flush - запись в файл массива $this->db
unload - закрытие файла и очищение $this->fp
при открытие происходит блокировка (flock).
в файл пишет нормально без проблем, но $this->db остается пустым после load() на записанный файл.
у меня не настолько много опыта что бы сходу увидеть решение траблы!
PHP:
<?php
class mydb_sdb
{
var $path;
var $fp;
var $db;
var $base64 = false;
function mydb_sdb($path,$base64=true) {$this->load($path,$base64);}
function openstream($path) {$this->closestream(); if (!is_readable($path)) {$a = fopen($path,"w"); fclose($a);} if (!is_readable($path)) {return false;} else {$this->fp = fopen($path,"r+"); flock($this->fp,LOCK_SH); flock($this->fp,LOCK_EX); return true;}}
function closestream() {if (is_resource($this->fp)) {flock($this->fp,LOCK_UN); fclose($this->fp);}}
function load($path,$base64=TRUE)
{
$this->path = $path;
if (empty($base64))
{
$base64 = $this->base64;
}
else
{
$this->base64 = $base64;
}
if ($this->openstream($path))
{
if ($this->base64)
{
$data = base64_decode($data);
}
$this->db = unserialize($data);
return $this->fp;
}
else {return false;}
}
function loaddata($data)
{
if ($this->base64)
{
$data = base64_decode($data);
}
$this->db = unserialize($data);
return $this->db;
}
function flush($path="")
{
if (empty($path))
{
$path = $this->path;
}
if (!is_resource($this->fp))
{
$this->openstream($path);
}
if (is_resource($this->fp))
{
$data = serialize($this->db);
if ($this->base64)
{
$data = base64_encode($data);
}
fseek($this->fp,0);
fwrite($this->fp,$data);
ftruncate($this->fp,strlen($data));
return $this->fp;
}
else {return false;}
}
function unload()
{
unset($this->db);
$this->closestream();
}
}
?>