¿Cómo mover un archivo a una carpeta diferente en el servidor usando PHP?

La función move_uploaded_file() y la función rename() se utilizan para mover un archivo a una carpeta diferente en el servidor. En este caso, tenemos un archivo ya cargado en el directorio temporal del servidor desde donde el método asigna el nuevo directorio. El archivo temporal se ha movido por completo a una nueva ubicación. Move_uploaded_file() garantiza la seguridad de esta operación al permitir que solo se muevan los archivos cargados a través de PHP. Por lo tanto, para mover un archivo ya cargado, usamos el método rename().

Sintaxis:

move_uploaded_file ( string $Sourcefilename, string $destination ) : bool
rename ( string $oldname, string $newname [, resource $context ] ) : bool
  • Método move_upload_file(): esta función verifica que el archivo fuente o ‘$Sourcefilename’ en la sintaxis sea un archivo de carga válido (lo que significa que se cargó a través del mecanismo de carga HTTP POST de PHP). Si el archivo es válido, se moverá al nombre de archivo dado por destino o ‘$destino’ en la sintaxis.
    El tipo de verificación es especialmente importante si existe la posibilidad de que cualquier cosa que se haga con los archivos cargados pueda revelar su contenido al usuario, o incluso a otros usuarios en el mismo sistema. Tenga en cuenta que si el archivo de destino ya existe, se sobrescribirá. Por esta razón, primero se debe verificar la disponibilidad de un archivo y luego se debe tomar la única acción.
  • Método rename(): este método intenta cambiar el nombre de oldname a newname, moviéndolo entre directorios si es necesario. Si existe un archivo de nombre nuevo, se sobrescribirá. Si existe el cambio de nombre del directorio newname, esta función emitirá una advertencia.

Ejemplo: este ejemplo es un código que carga un archivo en un directorio llamado Cargas y luego cambia su ruta a otro directorio llamado Nuevo.

Subir.html

<!DOCTYPE html>
<html>
  
<head>
    <title>
         Move a file into a different
         folder on the server
    </title>
</head>
  
<body>
    <form action="upfile.php" method="post"
            enctype="multipart/form-data">
          
        <input type="file" name="file" id="file">
          
        <br><br>
          
        <input type="submit" name="submit" value="Submit">
    </form>
</body>
  
</html>                    

upfile.php

<?php
  
// The target directory of uploading is uploads
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$uOk = 1;
  
if(isset($_POST["submit"])) {
      
    // Check if file already exists
    if (file_exists($target_file)) {
        echo "file already exists.<br>";
        $uOk = 0;
    }
      
    // Check if $uOk is set to 0 
    if ($uOk == 0) {
        echo "Your file was not uploaded.<br>";
    } 
      
    // if uOk=1 then try to upload file
    else {
          
        // $_FILES["file"]["tmp_name"] implies storage path
        // in tmp directory which is moved to uploads
        // directory using move_uploaded_file() method
        if (move_uploaded_file($_FILES["file"]["tmp_name"],
                                            $target_file)) {
            echo "The file ". basename( $_FILES["file"]["name"])
                        . " has been uploaded.<br>";
              
            // Moving file to New directory 
            if(rename($target_file, "New/". 
                        basename( $_FILES["file"]["name"]))) {
                echo "File moving operation success<br>";
            }
            else {
                echo "File moving operation failed..<br>";
            }
        }
        else {
            echo "Sorry, there was an error uploading your file.<br>";
        }
    }
}
  
?>

Nota: Los directorios Cargas y Nuevo ya existen una vez y, por lo tanto, deberá crearlos si no están disponibles dentro del servidor.


Code running:

Code running with use of rename method (Moving to New)


Métodos importantes:

  • file_exists($target_file): Este método se utiliza para comprobar la existencia de la ruta. Si existe, devuelve verdadero, de lo contrario, devuelve falso.
  • basename( $_FILES[“file”][“name”] ): este método se utiliza para obtener el nombre del archivo elegido y su especialidad radica en el hecho de que opera en la string de entrada proporcionada por el usuario y no tiene conocimiento de el sistema de archivos real y proporciona el uso de la función de seguridad proporcionada por los navegadores.

Publicación traducida automáticamente

Artículo escrito por piyush25pv y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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