Subir archivo a PHP con HTML

Subir archivo a PHP (método simple)

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í:

<!--
    El atributo enctype es importante, si no, no nos permitirá subir el archivo
    
-->
<form action="procesar.php" method="post" enctype="multipart/form-data">
    <input type="file" name="archivo">
    <br><br>
    <input type="submit" value="Enviar">
</form>

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.

<?php
/*
Subir archivo a servidor con PHP
@author parzibyte
 */
# La carpeta en donde guardaremos los archivos, en este caso es "subidas" pero podría ser
# cualqueir otro, incluso podría ser aquí mismo sin subcarpetas
$rutaDeSubidas = __DIR__ . "/subidas";
# Crear si no existe
if (!is_dir($rutaDeSubidas)) {
    mkdir($rutaDeSubidas, 0777, true);
}
# Tomar el archivo. Recordemos que "archivo" es el atributo "name" de nuestro input
$informacionDelArchivo = $_FILES["archivo"];
# La ubicación en donde PHP lo puso
$ubicacionTemporal = $informacionDelArchivo["tmp_name"];
#Nota: aquí tomamos el nombre que trae, pero recomiendo renombrarlo a otra cosa usando, por ejemplo, uniqid
$nombreArchivo = $informacionDelArchivo["name"];
$nuevaUbicacion = $rutaDeSubidas . "/" . $nombreArchivo;
# Mover
$resultado = move_uploaded_file($ubicacionTemporal, $nuevaUbicacion);
if ($resultado === true) {
    echo "Archivo subido correctamente";
} else {
    echo "Error al subir archivo";
}

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.

Si quieres ver cómo subir varios archivos mira este post.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

1 comentario en “Subir archivo a PHP (método simple)”

Dejar un comentario

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