HOWTO · PHP
Tamaño máximo de carga en PHP
La publicación de hoy cubrirá el tamaño máximo de carga en PHP.
En esta página
Para aceptar cargas más grandes, aumenta el límite por archivo de PHP (upload_max_filesize) y configura post_max_size con un valor suficiente para toda la solicitud. Primero identifica qué configuración de PHP utiliza el proceso que recibe la carga; después, aplica allí los ajustes y verifícalos mediante ese mismo proceso. La ubicación del archivo y el procedimiento para recargar el servicio dependen de cómo estén instalados y alojados PHP.
Identifica la configuración de PHP activa
PHP puede cargar ajustes desde php.ini; el archivo que utiliza PHP en la línea de comandos puede ser distinto del que usa un servidor web o PHP-FPM. Comprueba la configuración del proceso de PHP que recibe la carga. En la línea de comandos, php --ini muestra el archivo de configuración cargado. Para una solicitud web, un script temporal que llame a php_ini_loaded_file() puede identificarlo. Elimina ese script después de comprobarlo para no dejar información de configuración accesible públicamente.
php.ini suele contener los ajustes de una instalación o un entorno de ejecución de PHP. Algunas configuraciones de servidor web también permiten anulaciones por directorio mediante .htaccess, pero esto depende del servidor y de su integración con PHP. PHP no proporciona .htaccess por sí mismo, y el proveedor puede desactivar esas anulaciones. Si no tienes control sobre el archivo o servicio correspondiente, usa el panel de control del alojamiento o pregunta al administrador qué ajustes puedes cambiar.
Configura upload_max_filesize
Esta directiva limita el tamaño de cada archivo cargado. Edita la configuración activa y elige un valor que permita aceptar el archivo más grande que tengas previsto recibir. Por ejemplo, upload_max_filesize = 32M establece un límite de 32 megabytes por archivo. Los valores de tamaño de PHP suelen usar K, M o G; elige uno compatible con tu configuración de PHP y con tu proveedor. No des por sentado que el valor de ejemplo es el predeterminado actual ni que cambiarlo afecta a todos los entornos de PHP del servidor.
Configura post_max_size para toda la solicitud
post_max_size limita el cuerpo completo de la solicitud HTTP, incluidos los datos del formulario multipart y cualquier otro archivo incluido en ella. Configúralo por encima de upload_max_filesize y deja margen para los campos del formulario y la sobrecarga del formato multipart. Por ejemplo, para un límite de 32 megabytes por archivo, un límite de solicitud de 40M ofrece cierto margen. Si el límite de solicitud es demasiado bajo, PHP podría no poner el archivo cargado a disposición de la aplicación, aunque el archivo no supere upload_max_filesize. memory_limit no es un límite superior obligatorio para estos dos ajustes; la memoria necesaria depende de lo que la aplicación haga con el archivo cargado.
Aplica los cambios
Guarda el archivo de configuración o la anulación que corresponda al proceso de PHP que recibe las cargas. Según el proveedor, los cambios pueden aplicarse de inmediato o requerir que recargues o reinicies el servidor web, PHP-FPM u otro servicio de PHP. Sigue el procedimiento de tu entorno de alojamiento: no hace falta reiniciar PHP en la línea de comandos para ejecutar un comando nuevo, pero los servicios de larga duración pueden necesitar una recarga. En un alojamiento compartido, quizá tengas que cambiar los valores en el panel de control en vez de editar un archivo del servidor.
Comprueba los límites efectivos
Comprueba ambos valores en el mismo entorno que procesa las cargas. Un script breve de PHP puede mostrar lo que ve ese proceso:
Este ejemplo es autónomo, pero el paquete no incluye evidencia de su ejecución. Muestra los nombres de las directivas y los valores que devuelve el proceso; las etiquetas del bloque de código permanecen en inglés porque el bloque debe conservarse sin cambios.
<?php
foreach (['upload_max_filesize', 'post_max_size'] as $name) {
echo $name, '=', ini_get($name), PHP_EOL;
}
Ejecuta el script mediante el entorno web correspondiente para consultar los ajustes web; si lo ejecutas en una terminal, comprobarás PHP de la línea de comandos. Cuando termines, elimina cualquier página de diagnóstico temporal. Si los valores que muestra no han cambiado, confirma que editaste el archivo cargado y aplicaste los cambios al servicio correcto.
Soluciona los problemas cuando las cargas siguen fallando
Si se rechaza una carga, compara el tamaño del archivo con upload_max_filesize y el tamaño de la solicitud completa con post_max_size. Un error como «The uploaded file exceeds the upload_max_filesize directive in php.ini» apunta al límite por archivo de PHP, aunque el mensaje puede variar. Si el límite que se muestra sigue siendo bajo, comprueba qué archivo se cargó y si se recargó el servicio correspondiente. Si PHP muestra los valores previstos, otra capa podría imponer un límite menor, como el servidor web, un proxy, la plataforma de alojamiento o una regla de la aplicación. Comprueba los ajustes y registros de esa capa, y consulta al proveedor si no puedes configurarla. Mantén el límite de solicitud por encima del límite por archivo y vuelve a probar con la misma ruta y el mismo entorno de PHP que procesan las cargas reales.