готовый скрипт txt-базы.

tristram

Guest
готовый скрипт txt-базы.

это самый быстрый скрипт (из мною разобраных (около 100)) реализующий txt-базу.
особености:
1. файл открывается один раз.
2. удобная блокировка/разблокировка
3. base64 - для того чтобы не лазили уроды разные своими шАлАвливАми ручками.
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+");
   return true;
  }
 }
 function lock()
 {
  if (is_resource($this->fp))
  {
   flock($this->fp,LOCK_SH);
   flock($this->fp,LOCK_EX);
  }
 }
 function unlock()
 {
  if (is_resource($this->fp))
  {
   flock($this->fp,LOCK_UN);
  }
 }
 function closestream()
 {
  if (is_resource($this->fp))
  {
   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))
  {
   $data = @fread($this->fp,filesize($path));
   if ($this->base64)
   {
    $data = base64_decode($data);
   }
   $this->db = unserialize($data);
   return true;
  }
  else {return false;}
 }
 function loaddata($data)
 {
  if ($this->base64)
  {
   $data = base64_decode($data);
  }
  $this->db = unserialize($data);
 }
 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();
 }
}
?>
 

Фанат

oncle terrible
Команда форума
вопрос.
к администрации
стоит ли в форуме оставлять такие творения?
ведь потом приходят, находят и начинают пользовать.
потом бегут с вопросами и ты поражаешься - откуда такую кривизну взял? На вашем форуме!
 

Crazy

Developer
Я думаю, нужно завести специальный раздел: "Администрация не рекомендует". :)
 

lucas

Guest
Немного критики, да...

0. Товарищ собаковод, однако...
Думаю, не один я не переношу псину.

1. Товарищ не умеет создавать несуществующие файлы/проверять их "несуществование":
$this->closestream();
if (!is_readable($path))
{
$a = @fopen($path,"w");
@fclose($a);
}
if (!is_readable($path))
{
return false;
}
2. Товарищ либо знаком с блокировкой файлов лишь понаслышке, либо незнаком с ней вообще. Пример (две строки подряд):
flock($this->fp,LOCK_SH);
flock($this->fp,LOCK_EX);
3. Товарищ использует языковые конструкции, возбуждающие во мне сомнения в сохранности переменных, переданных в функцию как параметры, в теле этой функции:
function load($path,$base64=TRUE)
{
...
if (empty($base64)) ...
4. Товарищ выносит код в функцию, однако, не опускаясь до того, чтобы хоть раз ее вызвать:
5. ...что не мешает ему использовать код, полученный методом ^C^V из вышеозначенной функции, в другом методе:
if ($this->base64)
{
$data = base64_decode($data);
}
$this->db = unserialize($data);
6. Возникает подозрение в отсутствии у товарища задатков понимания банальной логики, ибо только этим можно объяснить появление подобного кода:
function flush($path="")
{
if (empty($path))
{
$path = $this->path;
}
7. Товарищ считает, что помимо женского и мужского полов существует еще один, выше не обозначенный. Пример (три строки подряд):
if (!is_resource($this->fp))
{
...
}
if (is_resource($this->fp))
P. S.: Думается, писал я это зря, ибо tristram в этом топике больше не появится за отсутствем времени, затрачиваемого на написание очередного подобного шедевра. :)

P. P. S.: ...что не мешает сказать ему "спасибо" за порцию здорового смеха и заряд хорошего настроения на остаток воскресенья. :D
 
Сверху