martes, 28 de junio de 2011

Copiar directorio PHP completo

Copiar directorio – carpeta completa PHP

No existe ninguna función de PHP que permita hacer una copia de un directorio completo hacia otro directorio. La función: copy de PHP no hace copias de directorios sino de archivos.

A continuación se muestran y explican varias formas de hacerlo.


function copyDirToDir($src,$dst){


$dir = opendir($src);

@mkdir($dst);

while(false !== ( $file = readdir($dir)) ) {

if (( $file != '.' ) && ( $file != '..' )) {

if ( is_dir($src . DIRECTORY_SEPARATOR . $file) ) {

copyDirToDir($src . DIRECTORY_SEPARATOR . $file,$dst . DIRECTORY_SEPARATOR . $file);

}

else {
copy($src . DIRECTORY_SEPARATOR . $file,$dst . DIRECTORY_SEPARATOR . $file);
}
}
}

closedir($dir);
}

En este caso parte de una función que recibe como parámetros una dirección origen y una dirección destino donde se copiará el archivo.

Pre-condición:

1- Ambas directorios son válidos, la dirección destino no necesita existir, pues es creada; pero su ruta de árbol hasta la penúltima carpeta que es la que se crea, debe ser válida.

2- Existen permisos en ambos directorios tanto para copiar como para crear archivos.

Se hace una búsqueda recursiva de las carpetas y se copian los archivos.


Copiar usando Comandos Linux (shell_exec)


$src = "moises/home/public_html/carpeta";
$destino = "moises/home/public_html/destino ";

shell_exec("cp -r $src $destino");


Copiar archivos según patrón (patterns)

Si quisiéramos copiar todos los archivos extensión (.php) que existen en una carpeta, podemos utilizar la función: copyPatternToDir de la siguiente manera:

copyPatternToDir(“lib/*.php”,”lib2”); // de lib todo los archivos php hacia la carpeta lib2

function copyPatternToDir($pattern, $dir)
{

foreach (glob($pattern) as $file) {

if(!is_dir($file) && is_readable($file)) {

$dest = realpath($dir) .DIRECTORY_SEPARATOR. basename($file);
copy($file, $dest);
}

}

}

No hay comentarios:

Publicar un comentario