public function recursiveCopy($src, $dst, $blacklist = array())
{
if (!is_dir($dst)) {
@mkdir($dst, 0777, true);
}
if (!is_dir($dst)) {
throw new RuntimeException(sprintf('Destination directory <%s> error', $dst));
}
$handle = opendir($src);
if (!$handle) {
throw new RuntimeException(sprintf('Source directory <%s> error', $src));
}
$skip = array_merge(array(".", ".."), $blacklist);
$stack = array();
while (false !== ($file = readdir($handle))) {
if (in_array($file, $skip)) {
continue;
}
if (is_dir($src . '/' . $file)) {
$stack[] = $file;
} else {
copy($src . '/' . $file, $dst . '/' . $file);
}
}
closedir($handle);
foreach ($stack as $file) {
$this->recursiveCopy($src . '/' . $file, $dst . '/' . $file, $blacklist);
}
}