Icono del sitio Tursos

Como Subir Archivos en PHP

En este tutorial vamos a aprender a hacer un upload o subida de archivos usando PHP, nuestro upload tendra la capacidad de filtrar los tipos de archivo y no permitir subidas de mas del tamaño que le definamos, en el ejemplo haremos un script PHP para subir imagenes y luego mostrarlas al usuario.

Estructura

Manejaremos una estructura como la de la imagen, es necesario crear una carpeta donde almacenaremos los archivos, le pondremos un nombre determinado(/subidas) que luego definiremos en el script (index.php):

HTML

<html>
   <body>
      <form action="" method="post" enctype="multipart/form-data">
        <label for="archivo">Sube un archivo:</label>
        <input type="file" name="archivo" id="archivo" />
        <input type="submit" name="boton" value="Subir" />
      </form>
      <div class="resultado"> <!-- Aqui ira el codigo PHP --> </div>
   </body>
</html>

Es de vital importancia definir el atributo enctype=»multipart/form-data» en la etiqueta form; de no ser así el upload no funcionara, en div.resultado saldrán los mensajes de error o de éxito.

PHP

El código PHP lo incluiremos justo debajo del formulario dentro del div.resultado, empezamos identificando el momento en que el formulario es enviado y el resto guiadse por los comentarios:

<?php 
// Registramos cuando el formulario haya sido enviado
if(isset($_POST['boton'])){ 
    // Hacemos una condicion en la que solo permitiremos que se suban imagenes y que sean menores a 20 KB     
    if ((($_FILES["archivo"]["type"] == "image/gif") || ($_FILES["archivo"]["type"] == "image/jpeg") || ($_FILES["archivo"]["type"] == "image/pjpeg")) && ($_FILES["archivo"]["size"] < 20000)) { 
        //Si es que hubo un error en la subida, mostrarlo, de la variable $_FILES podemos extraer el valor de [error], que almacena un valor booleano (1 o 0).
        if ($_FILES["archivo"]["error"] > 0) { 
            echo $_FILES["archivo"]["error"] . "";
        } else {  
            // Si no hubo ningun error, hacemos otra condicion para asegurarnos que el archivo no sea repetido         
            if (file_exists("archivos/" . $_FILES["archivo"]["name"])) {           
                echo $_FILES["archivo"]["name"] . " ya existe. ";         
            } else {
                // Si no es un archivo repetido y no hubo ningun error, procedemos a subir a la carpeta /archivos, seguido de eso mostramos la imagen subida           
                move_uploaded_file($_FILES["archivo"]["tmp_name"], "archivos/" . $_FILES["archivo"]["name"]);           
                echo "Archivo Subido ";           
                echo "<img src='archivos/".$_FILES["archivo"]["name"]."'>";         
            }
        }
    } else {
        // Si el usuario intenta subir algo que no es una imagen o una imagen que pesa mas de 20 KB mostramos este mensaje         
        echo "Archivo no permitido";
    } 
}
?>

Código Final

<html>
   <body>
      <form action="" method="post" enctype="multipart/form-data">
        <label for="archivo">Sube un archivo:</label>
        <input type="file" name="archivo" id="archivo" />
        <input type="submit" name="boton" value="Subir" />
      </form>
      <div class="resultado">
      <?php 
       // Registramos cuando el formulario haya sido enviado
        if(isset($_POST['boton'])){ 
            // Hacemos una condicion en la que solo permitiremos que se suban imagenes y que sean menores a 20 KB     
            if ((($_FILES["archivo"]["type"] == "image/gif") || ($_FILES["archivo"]["type"] == "image/jpeg") || ($_FILES["archivo"]["type"] == "image/pjpeg")) && ($_FILES["archivo"]["size"] < 20000)) { 
                //Si es que hubo un error en la subida, mostrarlo, de la variable $_FILES podemos extraer el valor de [error], que almacena un valor booleano (1 o 0).
                if ($_FILES["archivo"]["error"] > 0) { 
                    echo $_FILES["archivo"]["error"] . "";
                } else {  
                    // Si no hubo ningun error, hacemos otra condicion para asegurarnos que el archivo no sea repetido         
                    if (file_exists("archivos/" . $_FILES["archivo"]["name"])) {           
                        echo $_FILES["archivo"]["name"] . " ya existe. ";         
                    } else {
                        // Si no es un archivo repetido y no hubo ningun error, procedemos a subir a la carpeta /archivos, seguido de eso mostramos la imagen subida           
                        move_uploaded_file($_FILES["archivo"]["tmp_name"], "archivos/" . $_FILES["archivo"]["name"]);           
                        echo "Archivo Subido ";           
                        echo "<img src='archivos/".$_FILES["archivo"]["name"]."'>";         
                    }
                }
            } else {
                // Si el usuario intenta subir algo que no es una imagen o una imagen que pesa mas de 20 KB mostramos este mensaje         
                echo "Archivo no permitido";
            } 
        }
        ?>
      </div>
   </body>
</html>

Y con eso damos por finalizado este tutorial de como hacer un upload de archivos en PHP, puedes bajarte el código fuente en esta dirección.