Controlar el tamaño máximo de subida de archivos en nuestras aplicaciones Laravel es esencial tanto desde el punto de vista de la experiencia de usuario como de la seguridad. Es fácil olvidarse de que PHP o el servidor web tienen sus propios límites de subida, y un archivo muy grande puede causar problemas de rendimiento o errores inesperados.
En esta guía, veremos cómo aprovechar la configuración del archivo php.ini
, junto con las funcionalidades de Laravel, para asegurarnos de que los usuarios no suban archivos de un tamaño excesivo. Presentaremos un sencillo service llamado MaxUploadSizeService
que te permitirá calcular el límite real de subida de archivos en tu entorno actual, y utilizar ese valor para restringir o informar al usuario de un tamaño máximo aceptable.
Para empezar, hay dos directivas importantes en php.ini
:
upload_max_filesize
post_max_size
Ambas afectan el tamaño máximo de subida. Usualmente, upload_max_filesize
es el valor determinante, pero post_max_size
debe ser igual o mayor para evitar errores de tipo 413 Request Entity Too Large
.
php.ini
Si deseas permitir un tamaño mayor, podrías cambiarlo a 16M, 32M, etc. No olvides reiniciar el servidor web después de modificar estos valores para que surtan efecto.
Laravel, bajo el capó, detecta el valor de upload_max_filesize
a través de PHP. Sin embargo, puede que desees forzar un límite menor para tu aplicación. Por ejemplo, si tu hosting te permite 8 MB, pero tú solo necesitas 2 MB, podrías restringir el tamaño desde tu propio código.
Aquí es donde entra en juego el service MaxUploadSizeService
, que calcula un valor mínimo entre el límite que desees configurar y el que PHP permite, garantizando que no exijas algo mayor de lo que tu servidor soporta.
MaxUploadSizeService
UploadedFile::getMaxFilesize()
?En el código anterior, utilizamos UploadedFile::getMaxFilesize()
para obtener el límite real que PHP nos impone. Así es como Laravel define ese método por debajo:
Lee post_max_size
y upload_max_filesize
del php.ini
.
Convierte ambos valores a bytes mediante un método interno (parseFilesize
).
Elige el menor de los dos. De esta manera, aunque upload_max_filesize
sea mayor, si post_max_size
es más bajo, ese será el límite efectivo. Si alguno de los valores estuviera indefinido o en cero, se recurre a un valor muy grande (PHP_INT_MAX
) para no limitar por ese lado.
Con esto, te aseguras de que tu aplicación no intente subir un archivo superior al límite que efectivamente admite el servidor.
A continuación, un ejemplo sencillo de cómo podrías integrar el service en tu controlador:
Qué sucede aquí:
En el método index()
, calculas el límite en MB para mostrarlo (por ejemplo, en un formulario como texto de ayuda).
En el método store()
, verificas en bytes que el archivo subido no exceda tu límite forzado (5MB) ni el que impone PHP.
Centralización de la lógica: El service MaxUploadSizeService
encapsula toda la lógica de cálculo y conversión. Si decides cambiar algo en el futuro (p. ej. soportar TB), lo harás en un solo lugar.
Fácil lectura y mantenimiento: Métodos como getMaxUploadSize()
y convert()
están claramente separados y son intuitivos.
Flexibilidad: Puedes solicitar un tamaño máximo diferente en cada controlador o acción, dependiendo de tus necesidades.
Compatibilidad con el servidor: Respetarás siempre el límite que PHP tenga configurado en php.ini
.
Recuerda tu entorno: En desarrollo, quizá prefieras límites de subida más altos para pruebas; en producción, suele ser más seguro restringirlos.
Notifica al usuario: Al saber el tamaño máximo en MB (o la unidad que sea), puedes mostrarlo en tu formulario para que la gente no intente subir archivos enormes.
Apoya con validaciones de Laravel: Puedes seguir usando las validaciones de archivos nativas de Laravel (mimes
, max
, etc.) para reforzar la seguridad.
Reinicio del servidor: Cada vez que modifiques php.ini
, no olvides reiniciar tu servidor para que los cambios tengan efecto.
Ajustar el tamaño máximo de subida de archivos en Laravel ayuda a mantener tu aplicación ágil y evita problemas de rendimiento o seguridad. Con un service como MaxUploadSizeService
, puedes:
Respetar los límites globales de PHP (upload_max_filesize
, post_max_size
).
Forzar un límite menor si tu lógica de negocio así lo requiere.
Informar al usuario de forma precisa y clara sobre cuánto pueden subir.
¿Te ha resultado útil este método? ¡Comparte tu experiencia con tus amigos!
Y no te olvides de revisar el video completo donde verás cómo implementarlo paso a paso.
Cursosdesarrolloweb es una plataforma educativa con cursos y tutoriales en texto y vídeo.
Términos y condiciones Política de privacidad Términos y condiciones para afiliados Formulario de contacto
Copyright 2025 © Todos los derechos reservados.