Juan Rabadan

20Jan/102

Sitio offline por mantenimiento

Algunas veces necesitamos hacer tareas de mantenimiento en alguno de nuestros sitios que están en producción y mientras estas tareas transcurren no queremos que los usuarios ingresen al sitio.

En el siguiente artículo intentaré explicarles como pueden hacer esto con CodeIgniter utilizando hooks.

Paso 1

Debemos habilitar los hooks en el archivo de configuración de la aplicación, situado en /application/config/config.php

$config['enable_hooks'] = TRUE;

Paso 2

Al final de nuestro archivo application.php incluimos el siguiente bloque

/*
|------------------------------------------------------------------
| Sitio en mantenimiento
|------------------------------------------------------------------
| Muchas veces necesitamos poner nuestro website offline.
| Asignando el valor TRUE a al parámetro de configuración
| $config['is_offline'] el sitio mostrará un cartel de
| mantenimiento a todos aquellos ips que no se encuentren
| definidos en el parametro $config['offline_allowed_ips']
|
| $config['is_offline'] = TRUE; // sitio offline
| $config['is_offline'] = FALSE; // sitio online
| $config['offline_allowed_ips'] = array('xxx.xxx.xxx.xxx') // ips permitidos
*/
 
$config['is_offline'] = FALSE;
$config['offline_allowed_ips'] = array('127.0.0.1');

Paso 3

Para configurar el hook en el sistema debemos editar el archivo hooks.php ubicado en la carpeta application/config. Allí insertamos el siguientes código:

$hook['pre_system'][] = array(
'class'   => 'site_offline_hook',
'function' => 'is_offline',
'filename' => 'site_offline_hook.php',
'filepath' => 'hooks'
);

Paso 4

Ahora solo nos resta crear el archivo para el hook. Creamos un nuevo archivo llamado site_offline_hook.php dentro de la carpeta /application/hooks/.

Si la carpeta no existe, entonces deberemos crearla.

Luego pegamos dentro del archivo recientemente creado, el siguiente bloque de código:

< ?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
/**
 * Check whether the site is offline or not.
 *
 */
class site_offline_hook {
 
    public function __construct() {
        log_message('debug','Accessing site_offline hook!');
    }
 
    public function is_offline() {
        if(file_exists(APPPATH.'config/application.php')) {
            include(APPPATH.'config/application.php');
 
            if(isset($config['is_offline']) && $config['is_offline']===TRUE) {
                if(isset($config['offline_allowed_ips']) && in_array($_SERVER['REMOTE_ADDR'],$config['offline_allowed_ips'])===FALSE) {
                    $this->show_site_offline();
                    exit;
                }
            }
        }
    }
 
    private function show_site_offline() {
        echo '<html><body>Sitio en mantenimiento.</body></html>';
    }
 
}
/* Location: ./system/application/hooks/site_offline_hook.php */

Con esto ya tenemos nuestro hook para poner nuestro sitio offline a todo el mundo cuando queramos. Solo debemos cambiar los parametros en el archivo application.php y listo.

Este fue mi cuarto artículo espero que les haya servido. Espero sus comentarios y sugerencias. Nos vemos en mi próximo artículo de la serie "Desarrollando aplicaciones web con CodeIgniter".

Artículos relacionados:

  1. Funciones para extender el date helper en CodeIgniter
  2. Que son los hooks en CodeIgniter
  3. Funciones para incluir en nuestros helpers de codeigniter
  4. Colección de screencast sobre CodeIgniter
  5. Contenido aleatorio
Comentarios (2) Trackbacks (0)
  1. che me parecio ver este theme en otro blog!
    jajaja

    Saludos y felicitaciones por el blog, faltan imagenes :D

  2. Lautaro, gracias por participar en mi blog. La idea original de este artículo fue extraída de la wiki de codeigniter. Yo la traduje al español para la comunidad hispana. También extendí el ejemplo con una mejora que me parecía muy útil. La misma es tener definido un array con los ips que siempre pueden ver el sitio.

    Saludos,


Comenta esta nota


No trackbacks yet.