Problemas comunes I: Max File Uploads en PHP

Como programador y administrador de servidores muchas veces me encuentro con problemas simples que, por diversas razones, se repiten cada cierto tiempo. Algunas veces son tareas que fueron realizadas en  proyectos antiguos que nadie recuerda o conoce; otras, en cambio, se pierden en la trivialidad de lo cotidiano y, por lo tanto, no están debidamente documentadas para que el resto de las personas con las que trabajo puedan resolverlas por su cuenta.

La idea entonces es crear y compartir algo así como un repositorio de soluciones rápidas a estos problemas comunes. Por tanto, si se animan, espero que en los comentarios pregunten lo que sea pertinente al tema expuesto o propongan nuevos problemas.

Problema: aumentar tamaño máximo para subir archivos con PHP

Estamos trabajando con un gestor de contenidos como Wordpres o Drupal y necesitamos subir mediante un formulario archivos PDF, PNG o DOC que pesan sobre 2 MB, pero resulta que no se puede y nos sale un mensaje de error.

El problema no es del gestor de contenidos. La configuración por defecto de PHP en un servidor Linux permite copiar o subir archivos desde la máquina local al servidor que tengan un tamaño máximo de 2MB. Aunque no es recomendable aumentar esta cuota en entornos poco protegidos o públicos es posible hacerlo de la siguiente forma:

serumax@bunbury:~$  sudo nano /etc/php5/apache2/php.ini
[sudo] password for serumax:

Ingresamos la clave sudo de nuestra máquina y con CTRL+W procedemos a buscar “upload_max_filesize“:

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

Nos fijamos que el parámetro file_uploads esté en On y donde dice upload_max_filesize = 2M reemplazamos por el tamaño que necesitamos, pero ojo con el tiempo de ejecución de los script en PHP, que por defecto es de 30 segundos (se archiva un nuevo draft) y si subimos un archivo muy grande esto puede verse afectado.

Por ejemplo, podemos aumentarlo a 5 Megas:

; Maximum allowed size for uploaded files.
upload_max_filesize = 5M

Guardamos con CTRL+O y salimos con CTRL+X.  Con esto ya hemos hecho lo más díficil. Ahora sólo nos resta volver a iniciar Apache, sí Apache, para  que los cambios tengan efecto. Esto porque PHP generalmente corre como módulo de Apache

serumax@bunbury:~$sudo /etc/init.d/apache2 restart
[sudo] password for serumax:

o mejor solo recargamos la nueva configuración

serumax@bunbury:~$sudo /etc/init.d/apache2 reload
[sudo] password for serumax:

Como comentario final, este ejemplo lo hice pensando en un servidor Linux  Ubuntu 8.04, con Apache2 y PHP5. Espero que sea de utilidad 🙂