трабла со скриптом! выручите!

  • Автор темы tristram
  • Дата начала

tristram

Guest
трабла со скриптом! выручите!

скрипт преднозначен для удобной записи обьектов/массивов в текстовики и получения обратно, также умеет пихать в 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();
 }
}
?>
 

Demiurg

Guest
отлаживать за тебя тут никто не будет.
 

tristram

Guest
Demiurg, тут не отладка. тут ошибка в коде.
Фанат, было бы чуть больше опыта, все бы сделал.

-~{}~ 05.07.04 03:29:

я почитал. голая теория. нотисы включены :)
 

IL78

Guest
tristram, поясни, если не трудно, работу ф-ции openstream().
p.s. результат [m]is_readable()[/m] кэшируется - может, из-за этого ф-ция не читает вновь созданный файл?
 

Demiurg

Guest
>тут не отладка. тут ошибка в коде.
ошибка в коде находится отладкой.
 

Фанат

oncle terrible
Команда форума
tristram
а что есть, по-твоему отладка и для чего она служит? :)
 
Сверху