Mostrando entradas con la etiqueta Copiar directorio. Mostrar todas las entradas
Mostrando entradas con la etiqueta Copiar directorio. Mostrar todas las entradas

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);
}

}

}