Cómo depurar un error 500 o una página en blanco en PrestaShop
Una pantalla en blanco no da pistas, pero siempre deja rastro. Este es el orden en que buscamos la causa cuando una tienda se cae.
Pocas cosas asustan más que abrir tu tienda y ver una página en blanco o un escueto «500 Internal Server Error». La buena noticia: la causa casi siempre está escrita en algún sitio. Este es el orden en que la buscamos.
1. ¿Qué ha cambiado?
Antes de tocar nada: ¿se ha instalado o actualizado un módulo?, ¿ha cambiado la versión de PHP del hosting?, ¿se ha subido algún fichero? El 80 % de las caídas coinciden con un cambio reciente. Si lo hay, ya tienes el primer sospechoso.
2. Activa el modo depuración (con cuidado)
En config/defines.inc.php:
define('_PS_MODE_DEV_', true);
Con el modo depuración, PrestaShop muestra el error completo en pantalla en lugar de una página vacía. Hazlo solo el tiempo imprescindible: el mensaje puede revelar rutas del servidor a cualquier visitante. Si puedes, reprodúcelo en una copia de la tienda en lugar de en producción.
3. Lee los registros
var/logs/: los registros de PrestaShop y Symfony (prod-AAAA-MM-DD.log). BuscaCRITICALyERROR.- El registro de errores de PHP del hosting (en cPanel suele estar en Métricas > Errores o en un
error_logen la raíz). - El registro del servidor web, si la página ni siquiera llega a PHP.
grep -E "CRITICAL|ERROR" var/logs/prod-$(date +%F).log | tail -20
4. Descarta módulos y overrides
En Parámetros avanzados > Rendimiento puedes desactivar temporalmente los módulos que no son de PrestaShop y los overrides. Si la tienda vuelve, la causa está en uno de ellos: reactívalos por mitades hasta encontrarlo.
active de la tabla module no basta; lo que decide si un módulo se ejecuta es su fila en module_shop.5. Vacía la caché, pero bien
Borra el contenido de var/cache/prod y var/cache/dev, no la carpeta var/cache entera: en algunas versiones ahí vive un fichero de parámetros que PrestaShop necesita para arrancar.
6. Las páginas «en blanco con 200»
Son las más traicioneras: el servidor responde bien pero no hay contenido. Las causas que más vemos:
- Un módulo o un cortafuegos a nivel de PHP que corta la petición con
exit. - Una función que no existe en el PHP del servidor. Por ejemplo, generar miniaturas en AVIF cuando la librería GD no trae soporte para ese formato.
- Memoria agotada en la generación de una página muy pesada.
Aquí ayuda mucho ejecutar la página desde la línea de comandos con un auto_prepend_file que registre, al terminar, los últimos ficheros cargados: te dice exactamente dónde se paró.
7. Cuando ya lo tienes
Corrige, desactiva el modo depuración, vacía caché y apunta qué pasó. La próxima vez que ocurra, alguien lo resolverá en cinco minutos en lugar de en una tarde.