1 Temmuz 2007 Pazar

Copy non-empty directory

// Path to this file by server directory structure.
$cfg_['localftpdir'] = join('/',array_splice(split("/",ereg_replace('\\',
'/', $PATH_TRANSLATED)), 0, count(split('/',ereg_replace('\\', '/',
$PATH_TRANSLATED)))-1));

// REMEMBER - No end backslash.
$startDir = $cfg_['localftpdir'].'/dir1';
$startDir = str_replace('//','/',$startDir); // for win systems
$endDir = $cfg_['localftpdir'].'/dir2';
$endDir = str_replace('//','/',$endDir); // for win systems

// Make base directory in end directory.
$arrCD = explode('/',$startDir);
mkdir($endDir.$arrCD[count($arrCD)-1],0700);
$endDir = $endDir.$arrCD[count($arrCD)-1];

function paste($param) {
$workDir = $param[0]; // Assign values to variables.
$endDir = $param[1]; // It's only for our comfort.
$var = $param[2]; //
$end = $param[3]; //

if ($dir = opendir($workDir.$var)) { // Open work directory.
$dirCount = 0; // Assume - there is no other directory in work directory.
while (($file = readdir($dir)) !== false) { // List all elements.
// If there is directory and it's not '.' and '..' that not exists in end directory.
// Choose first meet directory, select name and create it in end directory.
if ((is_dir($workDir.$var.'/'.$file) && (($file != '.') && ($file != '..')))
&& is_dir($endDir.$var.'/'.$file) == false) {
$dirCount++; break; // Break while - work directory is not empty.
}
if (is_file($workDir.$var.'/'.$file) && is_file($endDir.$var.'/'.$file) ==
false) {
copy($workDir.$var.'/'.$file,$endDir.$var.'/'.$file);
}
}
if ($dirCount==0) { // If there was no other directories.
if ($var == '' || $var == '/') { $end=true; } // And if we are in start directory this means we must finish copying.
else { // Else...
$var = str_replace('//','/',$var);
$arrVar = split('/',$var);
$arrVar = array_slice($arrVar, 0, count($arrVar)-1);
$var = join('/',$arrVar); // cut $var path one element from end.
}
}
else {
mkdir($endDir.$var.'/'.$file,0700); // Make chosen directory in end directory.
if ($var=='') { $var = '/'.$var.$file; } // Increase $var path.
else { $var = '/'.$var.'/'.$file; }
$var = str_replace('//','/',$var);
}
} closedir($dir); // Close work dir.

$param[0] = $workDir; // Assign values to array, ...
$param[1] = $endDir; //
$param[2] = $var; //
$param[3] = $end; //

return $param; // return array as a function result.
}

if ($dir = opendir($startDir)) { // Copy all files from main copied directory to end directory.
while (($file = readdir($dir)) !== false) {
if (is_file($startDir.'/'.$file) && is_file($endDir.'/'.$file) == false) {
copy($startDir.'/'.$file,$endDir.'/'.$file);
}
}
} closedir($dir);

// Assign starting values...
$end = false;
$param[0] = $startDir;
$param[1] = $endDir;
$param[2] = '';
$param[3] = $end;

// Copy directory.
while ($end !== true) {
$param = paste($param);
$workDir = $param[0];
$endDir = $param[1];
$var = $param[2];
$end = $param[3];
}

echo 'Done !';


0 Comments: