Gravatar de Armonth

Cómo personalizar la página de error en la base de datos

Cuando WordPress no puede acceder a la base de datos muestra una página informando del error… una página cutre y ya demasiado vista.

Si le dedicamos horas a personalizar nuestro tema, ¿por qué no hacerlo con la página de error en la base de datos?. De seguro que alguna vez la tendrán que ver tus usuarios.

Las instrucciones están basadas en un artículo de All Forces aunque realmente no tiene ningún misterio y lo he ampliado bastante.

Creando una página de error personalizada

Aunque podríamos incrustar la página en el fichero wp-db.php, si actualizamos WordPress y nos olvidamos habremos perdido el tiempo inútilmente. Por ello recomiendo crear en la ruta de nuestra plantilla un fichero db-error.php. Para ello debemos tener en cuenta lo siguiente:

  1. No podemos usar funciones de WordPress. Cuando aparece el error, no podemos usar funciones de WordPress especialmente aquellas que requieren de acceso a la base de datos (obvio, no tenemos acceso).
  2. Necesitamos una página estática. Debemos adaptar la plantilla o crear un fichero HTML de forma estática: el nombre, descripción y todo aquello que se genera de forma dinámica debe ponerse en HTML a mano (o no ponerse).
  3. Pero podemos seguir usando PHP. Lo que no podemos es usar funciones de WordPress o que requieran MySQL, pero a modo de resumen todo lo que sea programado manualmente en el propio fichero y no acceda a MySQL se puede usar.
  4. Es una buena idea enviar una cabecera HTTP 503. La cabecera HTTP 503 (Service Unavailable) es una cabecera que indica que en ese momento debido a problemas de red o del servidor el servicio no está disponible.

    Algunos programas (o buscadores…) aprovechan esta cabecera para informar o para dejar de hacer ciertas tareas. En principio con la cabecera 503 se debería acabar que coincida una caída con que el googlebot pasa por la web y encontrarte que te ha indexado la página de error en la base de datos.

Una vez que tengamos la página, le ponemos al principio del todo un:

 <?php header('HTTP/1.0 503 Service Unavailable'); ?>

Y ya la tenemos lista, solamente falta hacer el hack al WordPress.

Modificando WordPress

El fichero a tocar es el wp-includes/wp-db.php, casi al final se ve una función llamada “ball”. Lo mejor es buscar en el código por “Justs wraps errors”.

Dentro de la propia función tiene la página de error BBDD yo lo que hago es borrarla dejándola así:

function bail($message) { // Just wraps errors in a nice header and footer

  /* Custom Error page hack */

    include(ABSPATH . 'wp-content/themes/tu-tema/db-error.php');
    $error = ( !$this->show_errors ) ? '' : $this->show_errors;
    die();

    }

Solamente tenéis que cambiar la ruta para que “tu-tema” sea el nombre del directorio que alberga tu tema y el fichero db-error.php.

Probando que funciona…

La mejor forma de probar si funciona es provocar un error en la BBDD, para ello podemos cambiar el nombre de la base de datos en el fichero wp-config.php por otro “un momento” y luego restaurarlo.

Además, si usáis WP-Cache, las páginas cacheadas seguirán enviándose y no se vera el error por lo que podremos entrar en el Dashboard (el cual nunca es cacheado) y ver el fallo medio tranquilos.

Ahora veamos quien es el primero en ver la de SigT ;-).

10 Comentarios (feed)

  1. Gravatar de InKiLiNo InKiLiNo nos comenta:

    Pues no se como voy a verla si no te sale ningun error en la BBDD, pero bueno me conformare con ver la del error 404 :P

    Martes, 13 de Febrero/2007 @ 7:29

  2. Gravatar de Armonth Armonth nos comenta:

    Pues lo dicho, a ver quien es el primer privilegiado :P.

    PD: Para ser un poco puñetero, acabo de poner una medida para que el fichero de error no se pueda cargar directamente desde URL, así sólo lo podrás ver cuando esto se caíga (muhahahahaaa xD)

    Martes, 13 de Febrero/2007 @ 7:34

  3. Gravatar de George George nos comenta:

    All your base are belong to us

    Lo siento en el alma, lo siento de verdad, pero parece ser que has llegado a está página que es una página de Error404 lo cual significa que el enlace que te ha llevado aquí no funciona.

    Este error ha sido causado por la solicitud de una web, documento o recurso no disponible dentro del propio servidor, algunas de las posibles causas:

    Se ha escrito un enlace externo sin el http: // delante y sale como: http:/ /sigt.net/$RUTA_A_LA_WEB_EXTERNA.

    Una web externa ha enlazado a SigT (se agradece) pero da Error 404: Seguramente se ha equivocado al escribir el enlace, poco se puede hacer salvo informar al autor.
    * Se enlaza a un documento guardado en SigT pero falla, seguro que es una chapuza de las mias :P así que contactadme.

    Espero que cualquier error de este tipo o parecidos no lo veáis a menudo :-)

    Martes, 13 de Febrero/2007 @ 9:04

  4. Gravatar de Armonth Armonth nos comenta:

    George: Erroneo.

    La página de Error404 NO es la página de error por no poder conectar a la base de datos…

    Martes, 13 de Febrero/2007 @ 9:09

  5. Gravatar de George George nos comenta:

    cierto, he caido luego tras darme ese fallo en otro blog (esta vez sin buscar el fallo xD )

    Martes, 13 de Febrero/2007 @ 9:16

  6. Gravatar de Ninio romantico (mi nick xD ) Ninio romantico (mi nick xD ) nos comenta:

    Tengo un problema…

    Al agregar esta linea de codigo:

    Me dice lo siguiente:

    Warning: Cannot modify header information - headers already sent by (output started at /home/www/ninioromantico.com.ar/wp-includes/wp-db.php:373) in /home/www/ninioromantico.com.ar/wp-includes/wp-db.php on line 373

    Nota: No cree un archivo aparte, solo modifique el que ya estaba.
    Osea modifique: wp-db.php

    ¿Como puedo hacer para agregar la cabecera 503 sin que aparezca ese error?

    Martes, 27 de Marzo/2007 @ 3:33

  7. Gravatar de Armonth Armonth nos comenta:

    Pues el error debe ser por existir espacios de más después del ?> final… o algo por el estilo, yo te recomiendo que crees un fichero error-db.php porque te digo que vas a tener que actualizar wordpress (últimamente muy a menudo) además así te aseguras que todo funciona como debe…

    Y revisa la línea 373 que es donde peta el script :P

    Martes, 27 de Marzo/2007 @ 10:38

  8. Gravatar de j_aroche j_aroche nos comenta:

    Gracias al buen Dreamhost ya pude ver tu platilla personalizada xxDD

    http://www.flickr.com/photos/j_aroche/438151532/

    Jueves, 29 de Marzo/2007 @ 16:45

  9. Gravatar de German German nos comenta:

    Muy bueno, pero no lo hice al pié de la letra, sino que modifiqué el final del archivo wp-db.php, su para que muestre lo que quiero que se vea en html. Solamente cambié la imágen, no quise alterar el resto por fiaca y para no deshabilitar mi web así vería cómo me falla.

    Un abrazo.

    Martes, 17 de Julio/2007 @ 5:23

  10. Gravatar de Una Porquería!!! Una Porquería!!! nos comenta:

    Oye que molón!!!, yo ya me creé una página así y va de perlas, me vendrá muy bien para el server q tengo q como es gratis falla de vez en cuando :)

    El problema es que cuando actualice wordpress se me olvidará cambiar lo de wp-includes/wp-db.php

    Lunes, 18 de Febrero/2008 @ 16:13

No seas tímido, da tu opinión

Sé respetuoso con los demás, la diferencia de opiniones enriquece la discusión, los comentarios bajo ciertas circunstancias pueden ser moderados y requerir aprobación.