/**
* 递归拷贝:
* 如果目标路径存在且为目录则拷贝到此目录下,
* 如果目标路径不存在则原路径拷贝为目标路径
*@param $source 原文件位置
*@param $dest 目标路径
*@return 成功 true 失败 false
*/
function RecursiveCopy ($source, $dest) {
if (!file_exists($source)) {
return false;
}
$parentDest = dirname($dest);
if (!makeDIR($parentDest)) {
return false;
}
if (!is_dir($source))
{
$dest = is_dir($dest) ? $dest . '/' . basename($source) : $dest;
return @copy($source,$dest);
} else {
if (is_dir($dest)) {
$dest .= '/' . basename($source);
}
if (!makeDIR($dest)) {
return false;
}
$sourceHandle = opendir($source);
while ($fileName = readdir($sourceHandle)) {
if ($fileName == '.' || $fileName == '..')
continue;
if (is_dir($source . '/' . $fileName)) {
if (!RecursiveCopy($source . '/' . $fileName, $dest)) {
return false;
}
} else {
if (!@copy($source . '/' . $fileName, $dest . '/' . $fileName))
return false;
}
}
return true;
}
return false;
}
/**
* 创建目录(递归)
*/
function makeDIR($dir)
{
if (is_dir($dir) || @mkdir($dir)) return TRUE;
if (!makeDIR(dirname($dir))) return FALSE;
return @mkdir($dir);
}