note 41780 deleted from ref.dir by tomsommer
| From: | tomsommer@php.net | Date: | Thu, 22 Apr 2004 06:32:02 +0000 |
| Subject: | note 41780 deleted from ref.dir by tomsommer | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-68507@lists.php.net to get a copy of this message | ||
Note Submitter: Paulo Rosa (aka Duling)
----
Maybe off topic, but here's one that copies directories' contents from one side to another
recursively. Comments are in portuguese but I believe you'll understand.
It breaks on any error.
function fnc_copy_tree($original_dir, $destination_dir, $level=0) {
//
// Nível máximo é 5. Se o atingir, retorna falso
if ($level==5) {
return false;
}
//
// Utiliza variáveis auxiliares, sem '/' no fim.
$o_dir = $original_dir;
$d_dir = $destination_dir;
while (substr($o_dir, strlen($o_dir)-1, 1)=='/') {
$o_dir=substr($o_dir, 0, strlen($o_dir)-1);
}
while (substr($d_dir, strlen($d_dir)-1, 1)=='/') {
$d_dir=substr($d_dir, 0, strlen($d_dir)-1);
}
//
// Percorre a directoria
$handle = opendir($o_dir);
while (($entry=readdir($handle))!==false) {
$o_full_entry = $o_dir.'/'.$entry;
$d_full_entry = $d_dir.'/'.$entry;
if ($entry=='.' || $entry=='..') {
//
// Não faz nada, passa à seguinte
}
else if (is_dir($o_full_entry)) {
//
//1. Cria directoria de destino.
//2. Copia novamente (recursivo)
if (!file_exists($d_full_entry) && !mkdir($d_full_entry)) {
return false;
}
if (!fnc_copy_tree($o_full_entry, $d_full_entry, $level+1)) {
return false;
}
}
else {
//
// É ficheiro. Simplemente copia-o.
if (!copy($o_full_entry, $d_full_entry)) {
return false;
}
}
}
return true;
}
Feel free to use.