web

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

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.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Tramitar acta de nacimiento en línea de manera instantánea

En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…

2 horas hace

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 semanas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esta web usa cookies.