Cómo solucionar el error POST Content-Length of .. bytes exceeds the limit of … bytes in unknown on line ... que se produce al subir fichero en formulario web. Explicamos por qué se produce el error de límite de tamaño de fichero al intentar subirlo a un sitio web y las posibles ubicaciones donde puedan establecerse límites de subida de ficheros en un servidor web Apache o Nginx.

Error POST Content-Length of .. bytes exceeds the limit of … bytes in unknown on line ..

Cuando intentamos subir un fichero desde un formulario web en HTML y PHP y nos muestra este mensaje de error:

POST Content-Length of .. bytes exceeds the limit of … bytes in unknown on line ..

Es debido a que el tamaño del fichero que se intenta subir supera el límite establecido en PHP. Hay varias formas de establecer límites de tamaño de ficheros a subir en HTML y PHP, las explicamos a continuación.

Limitar tamaño de fichero de subida en formulario HTML

Si tenemos un formulario HTML para mostrar una web con la posibilidad de subir un fichero a nuestro sitio web, podremos limitar el tamaño del fichero subido en el propio formulario web. En el siguiente enlace podéis consultar un ejemplo completo del uso de la directiva MAX_FILE_SIZE para limitar el tamaño del fichero a subir en el propio formulario web:

En el ejemplo anterior, sólo se permitirán ficheros de tamaño inferior a 2 megabytes (2.097.152 bytes). En el formulario web, una vez que el usuario elija el fichero a subir y pulse en «Subir», enviará los datos al fichero subir.php, para que los procese.

Si el usuario intenta subir un fichero que supere el tamaño máximo indicado en MAX_FILE_SIZE, el fichero subir.php procesará los datos, no recibiendo algunos de ellos, como este:

Ni tampoco este:

Que se devolverá a valor 0. Esto es importante tenerlo en cuenta, si el tamaño del fichero es superior al límite indicado, estos valores pueden ser null o 0.

Por ello, conviene revisar el error que se ha producido, que vendrá dado en la variable:

Y los posibles valores de esta variable son:

  • UPLOAD_ERR_OK, Valor 0: no hay error, fichero subido con éxito.
  • UPLOAD_ERR_INI_SIZE, Valor 1: el fichero subido excede la directiva upload_max_filesize de php.ini.
  • UPLOAD_ERR_FORM_SIZE, Valor 2: el fichero subido excede la directiva MAX_FILE_SIZE especificada en el formulario HTML.
  • UPLOAD_ERR_PARTIAL, Valor 3: el fichero fue sólo parcialmente subido.
  • UPLOAD_ERR_NO_FILE, Valor 4: no se subió ningún fichero.
  • UPLOAD_ERR_NO_TMP_DIR, Valor 6: falta la carpeta temporal en el servidor.
  • UPLOAD_ERR_CANT_WRITE, Valor 7: no se pudo escribir el fichero en el disco.
  • UPLOAD_ERR_EXTENSION, Valor 8: una extensión de PHP detuvo la subida de ficheros.

Por lo tanto, si hemos establecido la directiva MAX_FILE_SIZE en el formulario web de subida de fichero (como indicamos en este tutorial), podremos comprobar el error devuelto para personalizar el mensaje que se mostrará al usuario, con el siguiente código de ejemplo:

En el ejemplo anterior, capturamos el posible error que se pueda producir al subir un fichero y devolvemos un mensaje en la variable de sesión «Mensaje_Error».

Ajustar límite de tamaño de fichero subido en método POST en PHP

Para solucionar el error:

POST Content-Length of .. bytes exceeds the limit of … bytes in unknown on line ..

Editaremos el fichero de configuración de PHP php.ini, que en el caso de equipos Linux puede estar en la carpeta.

/etc/php/8.1/apache2

En el caso de equipos Windows, el fichero php.ini puede estar en C:\Windows\php.ini o en instalaciones XAMPP, suele estar en la unidad de instalación de XAMPP y la carpeta:

D:\xampp\php\php.ini

Editaremos este fichero y buscaremos la clave post_max_size. Estableceremos el valor que queramos en megabytes para limitar el tamaño de los ficheros subidos mediante el método POST. Es recomendable establecer un límite (por seguridad). Por ejemplo de 2 megabytes, para ello, añadiremos la línea (si no existe):

post_max_size=2M

Por otro lado, también modificaremos la clave upload_max_filesize, que también limita el tamaño de los ficheros subidos al servidor:

upload_max_filesize=2M

Por último, para permitir la subida de ficheros en general, comprobaremos que la clave file_uploads tiene el valor On:

file_uploads=On

Guardaremos los cambios en el fichero y reiniciaremos el servicio de Apache o Nginx para aplicar los cambios. En el caso de equipos con Linux Ubuntu, podremos hacerlo con el comando:

En el caso de equipos Windows, podremos reiniciar el servicio de Apache o Nginx desde los servicios de Windows (services.msc). En el caso de XAMPP, podremos reiniciar el servicio desde el panel de control, pulsando en «Stop» y «Start» en «Apache»: