Buenos días a todos!

Seguro que ya pensabais que pasaba de este blog totalmente y que todo lo escrito quedaría ahí para que la gente lo viera, pero que no añadiría ninguna entrada más ¿eh?, pues no…. solo que mi tiempo es muy muy limitado y este no es el único blog en el que escribo. Ya sabéis que soy editor en vitonica.com, que le meto caña a mi blog de fitness que es de lo que más me gusta hablar en mi tiempo libre y que además trabajo en mi empresa, doy clases en la uni, colaboro en la radio y para completar me puse a hacer la tesis doctoral.

Bueno con todo este rollo que os he soltado, os comento:

Hacía tiempo que los duendecillos informáticos no hacían de las suyas, así que no tenía material rápido o que considerara interesante para compartir, pero hoy, he tenido uno de esos días en los que la Informática me ha retado totalmente, esta vez se trataba de un error a la hora de subir ficheros de cierto tamaño a WordPress.

Concretamente el error que obtenía era HTTP Error (en español Error HTTP).

Todo sucedió cuando quise subir un fichero de más de 100MBytes a la plataforma Woocommerce de WordPress, para los que no lo conozcan, es la tienda online que nos ofrece wordpress y se pueden subir ficheros para que la gente los descargue tras una compra, lo que viene siendo, compras digitales, que está muy bien, os lo recomiendo, ya que el sistema se encarga de cifrar el fichero, de forma que solo estará disponible para la persona que realiza la compra (aprovecho para comentar que encriptar no existe en nuestro diccionario, por eso he dicho cifrar, a pesar de que nos guste más el otro palabro).

Bueno voy al grano que me lío, el tema es que quería subir un fichero grande, pero no me lo permitía, inicialmente por una restricción en el fichero php.ini, que subsané rápidamente cambiando estos valores:

upload_max_filesize = 240M
post_max_size = 240M

También es interesante revisar estos otros parámetros de tiempo de ejecución, porque puede ser que fallen:

memory_limit = 512M
file_uploads = On
max_input_time = 20000
max_execution_time = 20000
session.gc_maxlifetime = 20000

Bien, tras cambiar esto y realizar el correspondiente reinicio de apache (/etc/init.d/apache2 restart), ya permitía subir ficheros de más de 100MB sin problema. El caso es que tras esto, cuando intentaba subir un fichero de más de 15Mbytes, WordPress me decía algo tal que así:

Error HTTP como se aprecia en esta imagen

error-http

Bien, pues después de estar un buen rato buscando…. me da por mirar el log de errores del dominio en el que me estaba sucediendo esto (benditos ficheros los logs de errores) y veo lo siguiente:

mod_fcgid: HTTP request length 15733108 (so far) exceeds MaxRequestLen (15728640), referer: http://www.xxxx.xxx/wp-admin/post.php?post=18812&action=edit

Curioso, una buena pista…. al parecer hay un mod de PHP activo, llamado mod_fcgid que debe tener algún parámetro limitado. Efectivamente me voy al fichero vhost del dominio (que se encuentra dentro de la carpeta /etc/apache2/sites-available)  y veo lo siguiente:

 <IfModule mod_fcgid.c>
                                IdleTimeout 300
                                ProcessLifeTime 3600
                                # MaxProcessCount 1000
                                DefaultMinClassProcessCount 0
                                DefaultMaxClassProcessCount 100
                                IPCConnectTimeout 3
                                IPCCommTimeout 600
                                BusyTimeout 3600
                                
</IfModule>

Bien, pues tras forear…. encuentro una web que me indica que existe una variable llamada FcgidMaxRequestLen que al parecer, si no está en el fichero de configuración nombrada, tiene como valor, 15728640 bytes, es decir, los 15MBytes que me limitaban, así que lo agregué al fichero dándole un valor equivalente a 200MB, de la siguiente forma

 <IfModule mod_fcgid.c>
                                IdleTimeout 300
                                ProcessLifeTime 3600
                                # MaxProcessCount 1000
                                DefaultMinClassProcessCount 0
                                DefaultMaxClassProcessCount 100
                                IPCConnectTimeout 3
                                IPCCommTimeout 600
                                BusyTimeout 3600
                                FcgidMaxRequestLen 209715200
</IfModule>

 

Así que reinicié el apache de nuevo tras realizar este cambio y por fin pude subir el fichero grande :).

Espero que esta experiencia mía os sirva y os ahorre las dos horas y media de investigación profunda que tuve que realizar para llegar a ello.