Renombrar archivos con PHP

PHP

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")

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.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

2 comentarios en “Renombrar archivos con PHP

Deja una respuesta

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”