martes, 7 de abril de 2020

Apache y PHP: aumentar tamaño máximo de subida de archivos

PHP y Apache2 tienen una restricción que viene por defecto, limitan el tamaño máximo de archivo y el limite de subida de archivos.

Cuando necesitemos cargar algún archivo a nuestro servidor web. Esto se pone de manifiesto en aplicaciones web donde necesitamos subir archivos (texto, documentos, imágenes, etc...) y éstos son más grandes que el límite estándar, por defecto es de 2 y 8 MB respectivamente.

Cuando usamos algún CMS como por ejemplo: Joomla, WordPress o Drupal, o aplicaciones como eXtplorer, al subir archivos grandes, el resultado casi siempre es un mensaje de error.

Existen tres métodos para solucionar este problema. Aunque te aconsejamos el primer método (Modificar el php.ini global) o el último método (usar el archivo .htaccess)


  Solución 1: Modificar php.ini global  

La mejor solución de todas (solo se puede usar en servidores propios), modificar el archivo de configuración global de PHP, llamado php.ini.

Primero: Estamos usando el Servidor Debian GNU/Linux 10 Buster. Abrimos una consola de comando en el servidor, con un usuario administrador.  

Segundo: Vamos a usar el siguiente comando para saber que versión de php tenemos activa en este momento, (porque puede suceder y es muy normal que tengamos varias versiones de php instaladas en el servidor, aunque solo se puede activar una versión de php a la vez)

php -v

Nos informa que tenemos activado la versión 7.3.14-1

Tercero: Para poderlo modificar, editamos el archivo php.ini que se encuentra en la siguiente carpeta:

/etc/php/7.3/apache2

Nota importante: si tuviéramos mas versiones instaladas, la ruta seria la siguiente, para las versiones 7.X la ruta por defecto es: /etc/php/ mas la carpeta de la versión, por ejemplo: /etc/php/7.3 ó /etc/php/7.4, para la versiones 5.x la ruta es: /etc/php5

Usamos el siguiente comando para ir a dicha carpeta:

cd /etc/php/7.3/apache2
Usamos el comando ls para listar el contenido de dicha carpeta y asegurarnos que allí se encuentra el archivo php.ini.
Observamos que se encuentra el archivo php.ini
Entonce vamos a editarlo, para ello usamos el siguiente comando:

nano /etc/php.ini
Dentro de php.ini, vamos bajando y localizamos la primera variable que nos interesa:
post_max_size = 8M
y cambiamos el valor que trae por defecto, por el valor que necesitemos, (para este manual, de ejemplo vamos a usar el doble del que trae por defecto) es decir los cambiamos a 16M

Seguimos bajando hasta localizar la siguiente variable:
upload_max_filesize = 2M
y cambiamos el valor que trae por defecto, por el valor que necesitemos, (para este manual, de ejemplo vamos a usar el doble del que trae por defecto) es decir los cambiamos a 4M
Una vez realizada la modificación de ambas variables, guardamos los cambios pulsando la siguiente combinación de teclas: Ctrl + O (tecla control mas tecla o), soltamos ambas teclas y pulsamos la tecla Intro o Enter para confirmar.
Una vez guardado los cambios pulsamos la combinación de teclas Ctrl + X (tecla control mas tecla x) para salir.

Cuarto: Por ultimo para que los cambios realizados surtan efectos, tenemos que reiniciar el servidor web Apache2, usando el siguiente comando:

service apache2 restart
Si volvemos a intentar subir un archivo con la misma aplicación, podemos ver como ahora hemos aumentado el tamaño de subida al doble.



Solución 2: Usar php.ini local

Básicamente es hacer lo mismo que la solución anterior, pero tiene grandes diferencias, como que no se modifica el php.ini global, si no que creamos un php.ini local, ademas el php.ini local tiene preferencia sobre el php.ini global.

Este método tiene algunas restricciones:

- Solo se recomienda usarlo en servidores compartidos contratados.

- 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 tenemos que crear un php.ini en cada directorio donde queramos obtener el efecto deseado.

- Puesto que cada php.ini local tiene preferencia sobre el php.ini global, éstos deben incluir ciertas directivas de compatibilidad necesarias para el web hosting que tengamos contratado, por lo que es necesario consultar al proveedor por dichas directivas.

- Se crea el archivo php.ini y se guardan los cambios. Los cambios aplicados surten efectos, automáticamente al guardar el archivo php.ini

Nota: Para un servidor local de pruebas, no se recomienda esta opción.



  Solución 3: Usar .htaccess  

Creamos o modificamos, en caso de que ya exista el archivo .htaccess en el directorio raíz de nuestro servidor web apache2.
También podemos crear el archivo .htaccess, en la raíz de cualquiera de los CMS: Joomla, Wordpress, Drupal etc..., o de la aplicación o aplicaciones web que usemos en nuestro servidor.
En el archivo .htaccess tenemos que añadir las siguientes líneas (modificar los valores según nuestras necesidades):

php_value upload_max_filesize 16M
php_value post_max_size 4M
php_value memory_limit 128M


Listamos la ventajas de usar .htaccess

   - Es recursivo a directorio y subdirectorio desde la raiz donde se encuentre el archivo .htaccess (no tiene limites)

   - No hay limites de tamaños de archivos (cada uno puede usar el que le interese)

   - Generalmente, se usa en la raíz del CMS para que tenga efectos en todas las carpetas y subcarpetas de dicho cms.

   - Por defecto se puede usar en la raíz del servidor web apache2

   - Los cambios surten efectos nada mas guardar el contenido del archivo .htaccess

   - El archivo .htaccess prevalece sobre el archivo php.ini global










.

2 comentarios:

SiAgu dijo...

Buenas noches.
Ante todo gracias por el post.
He modificado el archivo php.ini sin resultado y también el .Htcacces y sigo sin poder cambiar el límite de 8mb.
Estoy en local, sabes porque puede ser?
Muchas gracias, un saludo

SiAgu dijo...

Buenas noches,
Primero Gracias por tu post.
He modificado el php.ini y el .htcacces y sigo cn la restricción de 8mb. Estoy en local.
Sabes porque puede ser?

Gracias y un saludo