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:
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