Subir un archivo a PHP a través de un formulario, sin usar JavaScript ni otras librerías es algo muy fácil de hacer. Hay tantos tutoriales por ahí que a veces nos confundimos, por lo que hoy veremos cómo subir un archivo a PHP a través de un input de tipo file; sin usar librerías o cosas de esas.

El tutorial será lo más simple posible, para que podamos implementar la carga de archivos en PHP en otros lugares.

Requisitos

Tener instalado un servidor web. Aquí puedes ver cómo instalar apache y PHP en Windows. Los archivos deben ir en tu carpeta htdocs o en tu directorio público en caso de que tu servidor sea distinto.

Preparar formulario

Lo primero que tenemos que hacer es crear un formulario para subir el archivo a PHP. Para ello basta con poner un input de tipo file. Así:

Hay que poner atención. Vemos que el formulario será enviado al archivo procesar.php, utilizando el método POST para que los datos viajen en el cuerpo de la petición.

Una cosa importante para subir un archivo con HTML y PHP es poner el atributo enctype. También hay que notar que al input le pusimos un nombre con el atributo name, el cual es archivo. Hay que recordarlo para cuando lo recuperemos en PHP.

El input de tipo submit es un botón que envía el formulario.

Con eso tenemos, ahora podremos seleccionar un archivo de cualquier tipo.

¿En dónde está el archivo subido?

PHP se encarga de manejar todo lo que tiene que ver con HTTP y pone los archivos en un directorio temporal; más tarde llena al arreglo superglobal $_FILES con la información del mismo; por ejemplo, incluye su nombre, peso y otras cosas.

Podemos moverlo con la función move_uploaded_file a cualquier directorio.

Recomendado: CRUD de archivos y carpetas en PHP (para aprender a crear carpetas o mover archivos)

Ejemplo de $_FILES para subir archivo a PHP

En el mismo directorio creamos el archivo llamado procesar.php, pues ahí serán mandados los datos como lo indicamos en el action de nuestro formulario. Lo que haremos será leer el contenido de $_FILES, el cual es un arreglo.

Si seleccionamos un archivo y vemos lo que tiene el arreglo veremos algo así:

Subir archivo a PHP con HTML

Subir archivo a PHP con HTML

Es un arreglo que tiene arreglos. Cada clave apunta a un arreglo que tiene:

  • name: el nombre original del archivo. No confíes en él, recomiendo renombrarlo en casos reales.
  • type: el tipo, tampoco confíes en él, porque se puede alterar.
  • tmp_name: la ruta absoluta en donde PHP lo guardó temporalmente.
  • error: un código de error, en caso de que éste exista. Puedes ver los códigos aquí. Si está en 0 entonces todo va bien.
  • size: el tamaño del archivo en bytes.

Si te preguntas por qué es un arreglo de arreglos, es porque el usuario podría subir muchos archivos; o nuestro formulario podría tener campos para subir a varios de ellos.

Mover archivo subido

Después de tanta teoría (la cual era necesaria) vamos a ver cómo mover ese archivo de $_FILES.

Se ve complicado o largo, pero no es así. Simplemente le puse muchos comentarios para no perdernos.

Ten cuidado en donde definimos el nombre del archivo; como lo dije, podríamos mejor ponerle otro nombre usando uniqid:

$nombreArchivo = uniqid() . $extension;

Por cierto, mira aquí cómo saber la extensión de un archivo en PHP.

Es una simple recomendación, pero si estás probando no pasa nada.

Conclusión

Con ese código de ejemplo en PHP y HTML para subir un archivo podemos cargar cualquier documento, imagen, foto, canción o película a nuestro servidor.

No te vayas sin seguirme en Twitter, Facebook y GitHub, así me motivas a escribir más posts.
Igualmente te invito a suscribirte en la parte superior derecha escribiendo tu correo en el formulario.
Si tienes dudas déjalas en un comentario


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: