Cuando subimos archivos a través de PHP normalmente existen restricciones en cuanto al número simultáneo de estos, y más que nada en el tamaño máximo por archivo que tenemos permitido subir. Un valor muy común por defecto de tamaño máximo es alrededor de 2 MB por archivo, y en la mayoría de escenarios es un valor demasiado bajo. Ya sea usando Apache o Nginx junto con PHP se puede modificar este comportamiento sin mucho conocimiento técnico.
Modificar límite en un entorno con Apache y PHP
Tenemos que modificar las directivas upload_max_filesize
y post_max_size
en nuestro php.ini, por ejemplo:
upload_max_filesize = 50M
post_max_size = 55M
Con esto el tamaño máximo es de aproximadamente 50 MB.
Solo nos queda reiniciar Apache.
En sistemas con systemd:
systemctl restart apache2
En otros sistemas:
service apache2 restart
Leer nota en pie de página sobre las unidades de medida y sobre la diferencia de tamaño entre las dos directivas anteriores.
Aumentar límite si usamos Nginx, PHP y PHP-FPM
Las cosas cambian un poco cuando usamos Nginx, ya que para poder incrementar el tamaño máximo tenemos que realizar un paso más, de lo contrario no funcionará si solo modificamos las directivas de PHP.
Usamos las directivas upload_max_filesize
y post_max_size
, igual que con Apache, en el archivo php.ini que se encuentra en /etc/php/7.*/fpm/php.ini (puede variar).
upload_max_filesize = 50M
post_max_size = 55M
En este caso quedaría con límite de 50 MB por archivo.
Editamos el archivo principal de configuraciones de Nginx, nginx.conf, normalmente se encuentra en /etc/nginx/nginx.conf, o cualquier archivo de configuraciones secundario como los archivos vhost (dentro de un bloque "Location", etc).
Si no existe la siguiente directiva la agregamos dentro del bloque http:
client_max_body_size = 50M;
Leer nota al final de esta entrada sobre las unidades de medida y sobre las directivas de PHP.
Después de realizar cambios es necesario reiniciar Nginx y PHP-FPM.
Para distribuciones con systemd:
systemctl restart nginx
systemctl restart php7.3-fpm
Para cualquier otra distribución:
service nginx restart
service php7.3-fpm restart
Si estamos usando una versión más reciente de PHP cambiamos el comando anterior para que corresponda a nuestra versión (php7.*-fpm).
Notas al modificar php.ini y nginx.conf
En lugar de KB, MB o GB, se utiliza simplemente K, B o G, respectivamente; y no deben existir espacios en blanco entre la cantidad y su unidad de medida.
Al editar php.ini, post_max_size necesita ser un poco más grande que upload_max_filesize por una recomendación en la documentación oficial.