Aumentar el tamaño máximo al cargar archivos con PHP y Apache

Aumentar el tamaño máximo al cargar archivos con PHP y Apache

Una limitación que suelen tener todos los alojamiento web compartidos (Arsys, 1&1...) es el límite máximo en tamaño o upload_max_filesize cuando deseamos subir un archivo a nuestro espacio web. Esto suele suceder cuando instalamos una aplicación web del tipo CMS (Wordpress, Joomla, Prestashop...) e intentamos añadir un nuevo plugin o paquete comprimido de un tamaño mayor a 2 Mb. Al tratar de subirlo desde el propio panel de administrador de nuestro CMS nos muestra este error para ello podemos modificar esa limitación quel normalmente es de 2 MB.

Al administrar un sitio web basado en WordPress, Prestashop, Joomla... y quieres utilizar las herramientas que nos proporcionan estos CMS para subir archivos mayores a esa limitación, el resultado será un mensaje de error.

Podemos modificarlo de varias formas que detallamos a continuación

Método 1: Crear o modificar php.ini global

La mejor solución y más efectiva es modificar el archivo principal de configuración de PHP. Si tenemos un servidor local, un servidor dedicado podremos modificar este archivo php.ini global sin problema, pero si tenemos un servidor compartido debemos comprobar con nuestro proveedor si es posible modificarlo, algunos proveedores de hosting compartido si permiten añadir o modificar parámetros en el php.ini Dependiendo de tu OS debes editar el archivo php.ini con los siguientes comandos: ArchLinux:

$ sudo vim /etc/php/php.ini

Ubuntu y Debian:

$ sudo vim /etc/php5/apache2/php.ini

Fedora y CentOS:

$ sudo vim /etc/php.ini

Usa nano, gedit, o el editor que prefieras. En el archivo php.ini, busca la línea de texto upload_max_filesize y modifica el valor para incrementarlo , por ejemplo:

upload_max_filesize = 12M

También es recomendable aumentar los valores de post_max_size es decir el tamaño máximo de carga para el envío, debe ser igual o mayor al upload_max_filesize, también debes modificar max_execution_time es decir, el tiempo máximo pero en segundos que el servidor dará al script para que se ejecute, en este caso, la carga de archivos. Por tanto nos quedaría del siguiente modo:

upload_max_filesize = 12M post_max_size = 12M max_execution_time = 120

Guarda los cambios y sal del edito recuersda reiniciar Apache para que todo funcione. En ArchLinux:$ sudo /etc/rc.d/httpd restartEn Debian y Ubuntu:$ sudo /etc/init.d/apache2 restartEn Fedora y CentOS:$ sudo /etc/init.d/httpd restartEn el caso que sea un hosting compartido, no es necesario ni posible reiniciar.

Método 2: Usar php.ini local

Básicamente es hacer lo mismo que la solución anterior, la diferencia es que no se modifica el php.ini global, si no que creamos un php.ini local. Este método tiene algunas limitantes:

  • Los efectos del php.ini local no son recursivos a los subdirectorios en donde se encuentre ubicado, así que no basta crearlo en el directorio raíz de nuestro servidor, si no que debemos especificar un php.ini en cada directorio donde queramos obtener el efecto deseado.
  • Puesto que cada php.ini local se toma en cuenta en vez del php.ini global, éstos deben incluir ciertas directivas de compatibilidad necesarias para el web hosting que tengas contratado, por lo que es necesario consultar a tu proveedor por dichas directivas.

Un ejemplo de php.ini local, con directivas de compatibilidad y las que nosotros necesitamos, sería:

zend_extension = /usr/local/ioncube/ioncube.so register_globals = Off magic_quotes_gpc = Off session.save_path = /tmp memory_limit = 200M upload_max_filesize = 10M post_max_size = 20M max_execution_time = 120

Pero repito, es muy importante consultar la documentación de tu proveedor de hosting.

Método 3: Usar .htaccess

Crea (o modifica, en caso de que ya exista) el archivo .htaccess en el directorio raíz de tu sitio, blog o aplicación web, o bien, en el directorio donde deseas que las directivas tengan efecto. Agrega las siguientes líneas (modifica los valores según lo requieras):

php_value upload_max_filesize 10M php_value post_max_size 20M php_value max_execution_time 120

A diferencia de la solución anterior, aquí no hay limitantes: los efectos del .htaccess si son recursivos a los subdirectorios donde se encuentre ubicado, y basta con especificar las directivas que nos interesan.

Notas Finales

En algunos ejemplos mencionados, utilicé sudo, pues son comandos que deben ejecutarse con permisos administrativos. Si no tienes configurado tu usuario para utilizar sudo, entonces debes ejecutar dichos comandos como root.

← Volver al blog