Cómo Ajustar el Tamaño Máximo de Subida de Archivos en Laravel de Forma Segura

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.

Revisando la configuración de PHP

Para empezar, hay dos directivas importantes en php.ini:

  1. upload_max_filesize

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

Ejemplo de configuración en 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.

Cómo obtener y ajustar el tamaño máximo de subida en Laravel

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.

Ejemplo de service: MaxUploadSizeService

¿Qué hace exactamente 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.

Ejemplo de uso en un controlador

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.

Beneficios de este enfoque

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

  2. Fácil lectura y mantenimiento: Métodos como getMaxUploadSize() y convert() están claramente separados y son intuitivos.

  3. Flexibilidad: Puedes solicitar un tamaño máximo diferente en cada controlador o acción, dependiendo de tus necesidades.

  4. Compatibilidad con el servidor: Respetarás siempre el límite que PHP tenga configurado en php.ini.

Buenas prácticas y consideraciones

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

Conclusión

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:

  1. Respetar los límites globales de PHP (upload_max_filesize, post_max_size).

  2. Forzar un límite menor si tu lógica de negocio así lo requiere.

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

Contacto