Cómo solucionar el error «Ha habido un error crítico en esta web» que puede aparecer a veces al cargar nuestra web en WordPress. Internamente el error que se produce es: PHP Fatal error: Allowed memory size of … bytes exhausted (tried to allocate … bytes). También explicamos cómo activar el modo de depuración (debug) de WordPress y cómo consultar el fichero de log debug.log.

El error, cuándo se produce, motivo

Cuando tenemos una web con WordPress y alguno de los plugins que tenemos activos requieren del uso de mucha memoria, o bien que la web tenga muchísimas visitas concurrentes, se puede producir un consumo de memoria de PHP alto. Si las necesidades de memoria sobrepasan los límites establecidos se producirá, en la web, el error:

Ha habido un error crítico en esta web

El error es muy genérico y no aporta nada de información, puesto que se muestra a todos los usuarios que naveguen en nuestra web. Por lo tanto, es lógico que por seguridad no muestre más información.

Para depurar el error real que se produce y el motivo, habrá que activar el modo debug en WordPress. A continuación explicamos cómo hacerlo.

Activar el modo debug en WordPress

Existen varias opciones para activar el modo debug en WordPress. Una de las más rápidas y eficientes es modificar el fichero wp-config.php que estará en la raíz de nuestra web. Lo editaremos y agregaremos las siguientes líneas (al final, por ejemplo):

Puede que el fichero ya contenga alguna de estas líneas, si es así comprobaremos que esté igual y dejaremos una de ellas. Guardaremos los cambios en el fichero wp-config.php y, a partir de ahora, WordPress escribirá cualquier warning, aviso o error que se produzca en nuestra web en el fichero:

/www/wp-content/debug.log

Activar el modo debug en WordPress

Con las líneas anteriores indicamos a WordPress que guarde los posibles errores que se produzcan en el fichero debug.log y que NO los muestre por pantalla. Esto es muy recomendable para no mostrar información sensible al usuario que navegue a nuestra web. Evidentemente, si estamos desarrollando la web y aún no ha sido publicada, podremos cambiar las líneas:

Por:

De esta forma mostraría los errores por pantalla también.

Consultar el fichero de log y analizar los posibles errores en WordPress

Una vez que tenemos activado el modo debug, podremos descargarnos o leer directamente el fichero:

/www/wp-content/debug.log

Que tendrá un contenido similar al siguiente:

Consultar el fichero de log y analizar los posibles errores en WordPress

En función del nivel de log, nos mostrará los Warning, los Notice o los errores o todos ellos. En nuestro caso nos mostrará todos los niveles de log. Nos centraremos principalmente en las líneas que empiecen por «PHP Fatal error» o bien «Error». Y sobre todo los «PHP Fatal error», que son los que pueden producir que la web no se muestre al usuario.

El nivel de error, ordenado por gravedad, de menor a mayor, sería:

  • PHP Notice: información sobre líneas de código que puedan no estar bien construidas y alguna otra información que no es motivo de error. Por ejemplo:
  • PHP Deprecated: posibles estructuras de código que contienen funciones obsoletas, que se mantienen en versiones de PHP nuevas únicamente por compatibilidad. Por ejemplo:
  • PHP Warning: avisos de alguna línea de código que produce errores de compilación, no son errores graves. Por ejemplo:
  • PHP Fatal error: se trata de un error grave que hará que la web no se cargue. A continuación mostramos un ejemplo, que es, precisamente, el error que analizaremos en este tutorial:
  • Error: errores que se producen en la carga del sitio web WordPress. Por ejemplo cuando falta alguna tabla. Normalmente estos errores permiten seguir cargando la web, con alguna sección o plugin que deje de funcionar. Por ejemplo:

Hay otros niveles de errores pero estos son los más importantes.

Solución al error PHP Fatal error: Allowed memory size of … bytes exhausted (tried to allocate … bytes)

Como hemos comentado al principio, este error se produce por falta de memoria asignada a PHP. Alguno de los plugins de WordPress que tenemos activos necesita más memoria de la permitida. Esto produce un error fatal (como hemos indicado anteriormente) y la web no cargará al usuario, únicamente le mostrará una página en blanco con el mensaje:

Ha habido un error crítico en esta web

Para solucionar este error tendremos dos opciones:

  • La primera será intentar averiguar qué plugin está consumiendo memoria de PHP, para verificar que su comportamiento es correcto. En este caso, si el plugin es correcto y requiere de más memoria, no quedará más remedio que ampliarla. Y si se trata de un plugin que está generando un comportamiento erróneo tendremos que desactivarlo y buscar una solución.
  • La segunda es ampliar el límite de memoria asignada a PHP. Esto puede hacerse de varias formas, como explicamos a continuación.

Ampliar límite de memoria para PHP desde la línea de comandos

El mejor método es modificar el fichero php.ini. Si tenemos acceso a la línea de comandos de nuestro servidor web con usuario con privilegios suficientes, únicamente tendremos que editar el fichero /etc/php.ini, por ejemplo con nano:

nano /etc/php.ini

(en servidores Linux suele estar en /etc, en servidores Windows suele estar en C:\Windows\System32)

Buscaremos la línea: memory_limit y ampliaremos su valor. No debemos excedernos, dado que PHP podría consumir más memoria de la disponible en el sistema y generar un cuelgue del equipo completo. Por lo tanto es conveniente ir aumentando este valor poco a poco, hasta comprobar que ya no se produce el error. Por ejemplo, si tenemos 64M, podremos ampliarlo a casi el doble, a 124M:

memory_limit=124M

Ampliar límite de memoria para PHP desde la línea de comandos

Guardaremos los cambios pulsando Control + W y cerraremos pulsando Control + X.

Ahora tendremos que reiniciar el servicio de Apache para que el cambio se aplique. En función del sistema operativo lo haremos de una forma u otra, para un equipo Linux CentOS:

service httpd restart

Ampliar límite de memoria para PHP desde el fichero .htaccess

Si tenemos acceso al fichero .htaccess de nuestro sitio web, que suele estar en el raíz, podremos editarlo y añadir la línea:

php_value memory_limit 124M

Ampliar límite de memoria para PHP desde el código PHP

Otra forma posible de ampliar el límite de memoria de PHP es desde el propio código PHP, agregando:

Aunque hay que tener en cuenta que no todos los servidores permiten realizar este cambio desde el código PHP. Todo irá en función del nivel de restricciones que tengamos.

Sin duda, el mejor método y más eficiente es modificar el fichero de configuración de php, /etc/php.ini, como hemos indicado aquí.

Con esta ampliación de memoria debería de dejar de producirse el error fatal y nuestra web cargará correctamente. Si sigue produciéndose, habrá que volver a aumentar otro poco este valor.

Una vez que tengamos solucionado el error es conveniente volver a desactivar el modo debug, pues solo es recomendable activarlo cuando queramos depurar algún error. Para desactivarlo será suficiente con cambiar la línea del fichero wp-config.php:

Por: