El tema de subir archivos a un servidor es algo que nos encontraremos casi seguro. Sin embargo, es una tarea bastante sencilla. Para subir archivos basta que el formulario tenga el encoding multipart/form-data y el navegador se encargará del resto. En este post nos centraremos en la parte más básica, que será crear un formulario y cómo tratar con el archivo subido.
Elaboración del formulario
Para el siguiente ejemplo creamos un archivo upload.php donde tendremos el siguiente código HTML del formulario.
1 2 3 4 5 |
<form method='post' action='upload.php' enctype='multipart/form-data'> <label>Selecciona archivo: </label> <input type='file' name='archivoSubido'> <br> <input type='submit' value='Subir'> </form> |
Este formulario pasará los datos mediante POST e indica al navegador que los datos enviados tendrán un archivo al emplear multipart/form-data. El atributo action indica el destino de los datos del formularios que será el mismo archivo.
Dentro del formulario hay 2 inputs. Uno de tipo file que recogerá el archivo que queremos subir y el cual nos referiremos a el como «archivoSubido». El otro input es un submit que lo que hará será confirmar los datos del formulario y enviarlos al destino que será el propio upload.php.
Código PHP para subir archivos
Ahora vamos con el código php que estará justo después del cierre del form y será el tema principal de la subida de archivos.
1 2 3 4 5 6 7 8 9 |
<?php if ($_FILES) { $destino = $_FILES['archivoSubido']['name']; move_uploaded_file($_FILES['archivoSubido']['tmp_name'], $destino); echo "Se ha subido la imagen: ". $destino; echo "<br><img src='$destino'>"; } ?> |
Este código se ejecutará al presionar el botón «Subir» ya que al recargar la página otra vez tendremos los datos del formulario y comprobamos si se subió un archivo. De ser así, lo que hace es mostrar la imagen en la etiqueta <img>.
La global $_FILES es el array asociativo que hace referencia a los archivos subidos. De hecho el if($_FILES) cumplirá la condición si dicho array contiene algún valor. Como la primera vez que ejecutamos el código el $_FILES estará vacío, se omite este bloque de código.
Hay una variable llamada $destino que almacena la ruta de destino pero, en este caso el nombre del archivo. Usamos esa variable como argumento en la función move_uploaded_file() para trasladar los archivos de la localización temporal ($_FILES[‘archivoSubido’][‘tmp_name’]) a nuestra ruta de destino. El $destino al tener sólo el nombre del archivo, debería de guardar el archivo en el mismo lugar donde esté el archivo upload.php. Si recibes warning de permission denied, revisa que en la ruta de destino tengas permisos de lectura y escritura. Otra alternativa es que la ruta de destino sea una carpeta, por ejemplo:
1 |
$destino = imagenes/$_FILES['archivoSubido']['name']; |
Pero siempre se parte que dicha carpeta esté en el mismo lugar que upload.php. De estar en otro sitio deberías de usar rutas relativas con niveles o rutas absolutas.
Y hasta aquí subir archivos mediante PHP, espero que os sea útil. A seguir picando 🙂