private function copy($source, $dest, $callback)
{
// Check for symlinks
if (is_link($source)) {
return symlink(readlink($source), $dest);
}
// Simple copy for a file
if (is_file($source)) {
$result = @copy($source, $dest);
$callback($this, $dest, $result);
return $result;
}
// Make destination directory
if (!is_dir($dest)) {
mkdir($dest);
}
// Loop through the folder
$dir = dir($source);
while (false !== ($entry = $dir->read())) {
if ($entry == '.' || $entry == '..') {
continue;
}
$this->copy("{$source}/{$entry}", "{$dest}/{$entry}", $callback);
}
// Clean up
$dir->close();
return true;
}