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.
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.
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.
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)
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í:
Es un arreglo que tiene arreglos. Cada clave apunta a un arreglo que tiene:
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.
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.
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.
En este post te quiero compartir mi experiencia tramitando un acta de nacimiento de México…
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
Esta web usa cookies.
Ver comentarios
Excelente explicación.
La mejor y más completa que he visto.
¡Gracias!