Aumentar el Tamaño Máximo al Cargar Archivos con PHP y Apache

Una restricción lógica, pero molesta a veces, es el límite máximo en tamaño cuando deseamos cargar algún archivo a nuestro servidor web. Lo anterior se hace más notable si estamos desarrollando una aplicación web donde los usuarios requieran subir archivos (ya sea imágenes, documentos, paquetes comprimidos, etc) y éstos son más grandes que el límite estándar, el cual normalmente es de 2 MB.

Otro escenario: Si administras algún sitio basado en WordPress, Drupal o Joomla, y quieres usar sus herramientas propias para subir archivos grandes, el resultado será un mensaje de error.

Ok, ¡basta de ejemplos! ¿cómo lo solucionamos? Hay varias maneras.

Solución 1: Modificar php.ini global

La mejor solución de todas (desgraciadamente no todos pueden implementarla): modificar el archivo principal de configuración de PHP. Si tenemos un servidor local, o hemos contratado un servidor dedicado, es casi un hecho que podemos modificar el php.ini global, pero si tenemos un servidor compartido (sumamente comunes en la web), esta solución normalmente no es posible (algunos web hostings si lo permiten).

Dependiendo de tu distro, debemos editar el archivo php.ini con alguno de los siguientes comandos:

En ArchLinux:

$ sudo vim /etc/php/php.ini

En Ubuntu y Debian:

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

En Fedora y CentOS:

$ sudo vim /etc/php.ini

Si no te sientes a gusto con vim, puedes usar nano, gedit, o el editor que prefieras.

Dentro de php.ini, localiza el texto upload_max_filesize y asígnale un valor superior al que ya tiene, por ejemplo:

upload_max_filesize = 10M

También te recomiendo aumentar los valores de post_max_size(tamaño máximo de carga por envío, debe ser igual o mayor al especificado en upload_max_filesize), e incluso el de max_execution_time (tiempo máximo en segundos que el servidor esperará al script para que termine su ejecución, en este caso, la carga de archivos). Por ejemplo:

upload_max_filesize = 10M
post_max_size = 20M
max_execution_time = 120

Guarda el archivo, y sal del editor. Para que los cambios aplicados funcionen, basta con reiniciar Apache.

En ArchLinux:

$ sudo /etc/rc.d/httpd restart

En Debian y Ubuntu:

$ sudo /etc/init.d/apache2 restart

En Fedora y CentOS:

$ sudo /etc/init.d/httpd restart

Solución 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.

Solución 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.

15 thoughts on “Aumentar el Tamaño Máximo al Cargar Archivos con PHP y Apache”

  1. muchas gracias amigo ya andaba yo preguntando como podía hacer eso pero ya encontré como solo tienes que agregar esto a tu .htaccess tiene que quedar de la forma que les presento abajo fue la única que me funciono…saludo desde http://www.mp3letras.com
    #set max upload file size
    php_value upload_max_filesize 20M

    #set max post size
    php_value post_max_size 10M

    # Do not remove this line, otherwise mod_rewrite rules will stop working
    RewriteBase /

    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ – [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # END WordPress

  2. saludos, no tengo mucha experiencia en esto, y me gustaria saber si hay alguna diferencia en colocar en cualquier linea dentro del archivo estos valores

    php_value upload_max_filesize 10Mphp_value post_max_size 20M
    php_value max_execution_time 120

  3. Buenos días compañero, llevo peleándome con este tema 1 mes entero, y ando ya un poco quemado. Tengo una web donde los usuarios se descargan archivos muy pesados de 400MB cada uno. Modifiqué los params mencionados en este artículo para gestionar los uploads (aunque los subi todo por FTP. ¿Cuál es mi problema? Cuando un usuario clica y descarga un archivo pesado, cuando lleva unas 70MB se corta la descarga… ¿Sabes cómo solucionarlo? ¿Es algun parámetro de php.ini?
    Muchas gracias de antemano.

  4. Muchas gracias Gregorio, pude quitar los errores del joomla haciendo los cambios en el php.ini. Pero sigo con el problema, no me cargan los artículos en la web (Joomla 3.0) se queda la web en el home (bicicletasrali.com

  5. Hola amigos!

    YO tengo otro problema con Drupal 7, resulta que subi la capacidad de upload file del php mediante cpanel, por ej a 28, pero Drupal ahora no me permite subir archivo de ningun tamaño mostrando el siguiente mensaje:

    “Ha ocurrido un error irrecuperable. El archivo subido probablemente
    excede el tamaño de archivo máximo (128 MB) que admite este servidor.”

    Siendo que subi un archivo de 3 MB

    A alguien le ha pasado, que podria ser?

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>