viernes, 10 de enero de 2014

Límite en tamaño máximo de subida en PHP (upload_max_filesize)

Para hacer subidas de ficheros grandes a un servidor web Apche con PHP, es ncesario cambiar dos variables de configuración del php.ini:
- upload_max_filesize: Que establece el tamaño máximo que puede tener un fichero que se va a subir-
- max_post_size: Establece el tamaño máximo total que puede subirse en el POST. Aquí se debe incluir cualquier otra información que se suba en ese momento.
Para estas variables se puede usar la M para indicar megabytes y la G para gigabytes.
Si se establece el upload_max_filesize a 100M y el max_post_size a 210M, se podrán subir simultáneamente 2 ficheros de hasta 100M.

Pero he encontrado un problema en Windows (Server 2008 R2), con Apache 2.2.8 y PHP 5.2.4, no sé si afectará en otras versiones más modernas (pero imagino que sí).
Si se establecen unos valores a partir de 2048M o 2G para estas variables, TODAS las peticiones POST llegan al servidor vacías. Da la sensación de que se está interpretando mal el valor introducido (overflow) y se está usando un 0 como tamaño máximo del post.
Usando un máximo de 2000M para ambas varibales no tenemos dicho problema, pero estamos limitados a ficheros de casi 2GB.
Por otro lado hay que tener en cuenta que muchos navegadores no permiten sobrepasar el límite de los 2GB, por lo que en realidad no tenemos mucho más margen (si estamos trabajando con navegadores, ya que para servicios web sí podría interesarnos ir a otros tamaños).