public function copyr($source, $dest)
{
if (is_file($source) and !is_dir($dest)) {
$dest = normalize_path($dest, false);
$source = normalize_path($source, false);
$dest_dir = dirname($dest);
if (!is_dir($dest_dir)) {
mkdir_recursive($dest_dir);
}
if (!is_writable($dest)) {
//return;
}
return @copy($source, $dest);
}
if (!is_dir($dest)) {
mkdir_recursive($dest);
}
if (is_dir($source)) {
$dir = dir($source);
if ($dir != false) {
while (false !== ($entry = $dir->read())) {
if ($entry == '.' || $entry == '..') {
continue;
}
if ($dest !== "{$source}/{$entry}" and $dest !== "{$source}" . DS . "{$entry}") {
$this->copyr("{$source}/{$entry}", "{$dest}/{$entry}");
}
}
}
$dir->close();
}
return true;
}