PHP Programación

Renombrar archivos con 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 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:

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

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

<?php
$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:

<?php
$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.

EduZRO

<p>Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.</p>

1 Comment

  1. Victor dice:

    Excelente, es justo lo que necesitaba y es muy fácil de entender.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *