Para renombrar archivos mediante PHP podemos usar la función rename, que devuelve true si la operación ha tenido éxito y false si ha fracasado. Se usa del siguiente modo:
rename ("viejo_nombre", "nuevo_nombre")
Contenidos
La función Rename
La función solamente era válida para distribuciones Linux, pero desde PHP 5.3.1 también funciona con los controladores de Windows.
Debemos tener en cuenta que viejo_nombre hace referencia a la ruta completa del archivo que queremos renombrar y nuevo_nombre hace referencia también a la ruta completa del nuevo nombre. Si por ejemplo usamos:
rename ("/directorio/nombreArchivo1.ext", "nombreArchivo2.ext");
Si usamos el código anterior lo que ocurrirá será que el archivo localizado en «/directorio/archivo1.ext» se moverá al directorio de trabajo actual de PHP con el nombre «nombreArchivo2.ext«, por lo que es recomendable dar rutas absolutas como se muestra a continuación:
rename ("/directorio/nombreArchivo1.ext", "/directorio2/nombreArchivo2.ext");
¿Qué ocurre si tenemos el archivo abierto?
Debemos tener en cuenta que si hemos abierto algún manejador o instancia del archivo con PHP, deberemos cerrarlas todas antes de renombrar el archivo o tendremos un error de permisos. Así por ejemplo el siguiente código no renombrará el archivo correctamente:
$archivoAbierto = fopen('./miArchivo.ext', 'r');
rename( './miArchivo.ext', './miArchivo2.ext' );
//El archivo no se renombrará
Sin embargo, el siguiente código sí renombrará el archivo correctamente:
$archivoAbierto = fopen('./miArchivo.ext', 'r');
fclose($archivoAbierto);
rename( './miArchivo.ext', './miArchivo2.ext' );
//El archivo se renombrará correctamente
Renombrar todos los archivos de un directorio
En el siguiente ejemplo vamos a eliminar todos los caracteres numéricos de todos los archivos de un directorio.
$directorio = opendir("./ruta/directorio);
while ( $archivo = readdir($directorio)) {
// Comprobamos que el archivo no sea un directorio
if (!is_dir($archivo)) {
$nuevoNombre = preg_replace('/[0-9]+/', '', $archivo);
$rutaArchivo1 = "./ruta/".$archivo;
$rutaArchivo2 = "./ruta/".$nuevoNombre;
if (rename ($rutaArchivo1, $rutaArchivo2)) {
echo ("El archivo ".$rutaArchivo1." se ha renombrado a ".$rutaArchivo2);
} else {
echo ("El archivo ".$rutaArchivo1." no se ha renombrado correctamente");
}
}
Espero que os haya sido útil. Podéis encontrar más información en la documentación oficial de PHP. Si tenéis alguna duda podéis dejar un comentario.
Excelente, es justo lo que necesitaba y es muy fácil de entender.
«./ruta/directorio ->falta tilde…