2011-12-31 8 views
6

Estoy usando zend framework. A veces deseo desactivar o bajar mi sitio para obtener un tiempo específico de mantenimiento. Entonces, ¿cómo puedo evitar que las personas accedan a cualquier página de mi sitio cuando sea necesario?¿Cómo deshabilitar el sitio web para una hora específica en zend framework?

Dónde está el cuello de botella en Zend Framework donde puedo detener todas las solicitudes y detener al usuario para continuar.

Gracias

Respuesta

7

La parte difícil de hacer esto dentro de la aplicación ZF es que, presumiblemente, su mantenimiento afectará a la aplicación. Por lo tanto, si la aplicación está "rota" durante el mantenimiento, existe el riesgo de que también se rompa una solución "integrada en la aplicación". En ese sentido, los enfoques "externos" como la modificación de .htaccess o el ajuste del archivo public/index.php son probablemente más sólidos.

Sin embargo, un enfoque "dentro de la aplicación" podría utilizar un complemento de controlador frontal. En application/plugins/TimedMaintenance.php:

class Application_Plugin_TimedMaintenance extends Zend_Controller_Plugin_Abstract 
{ 
    protected $start; 
    protected $end; 

    public function __construct($start, $end) 
    { 
     // Validation to ensure date formats are correct is 
     // left as an exercise for the reader. Ha! Always wanted 
     // to do that. ;-) 

     if ($start > $end){ 
      throw new Exception('Start must precede end'); 
     } 

     $this->start = $start; 
     $this->end = $end; 
    } 

    public function routeShutdown(Zend_Controller_Request_Abstract $request) 
    { 
     $now = date('Y-m-d H:i:s'); 
     if ($this->start <= $now && $now <= $this->end){ 
      $request->setModuleName('default') 
        ->setControllerName('maintenance') 
        ->setActionName('index'); 
     } 
    } 
} 

luego registrar el plugin en application/Bootstrap.php:

protected function _initPlugin() 
{ 
    $this->bootstrap('frontController'); 
    $front = $this->getResource('frontController'); 
    $start = '2012-01-15 05:00:00'; 
    $end = '2012-01-15 06:00:00'; 
    $plugin = new Application_Plugin_TimedMaintenance($start, $end); 
    $front->registerPlugin($plugin); 
} 

En la práctica, es posible que desee para empujar los tiempos de inicio/final hasta config. En application/configs/application.ini:

maintenance.enable = true 
maintenance.start = "2012-01-15 05:00:00" 
maintenance.end = "2012-01-15 06:00:00" 

entonces se podría modificar el registro plugin para parecerse a:

protected function _initPlugin() 
{ 
    $this->bootstrap('frontController'); 
    $front = $this->getResource('frontController'); 
    $config = $this->config['maintenance']; 
    if ($config['enable']){ 
     $start = $config['start']; 
     $end = $config['end']; 
     $plugin = new Application_Plugin_TimedMaintenance($start, $end); 
     $front->registerPlugin($plugin); 
    } 
} 

De esta manera, puede activar el modo de mantenimiento, simplemente editando la entrada de configuración.

+0

@Iznogood: Gracias por la edición. D'oh! ;-) –

+0

¡No pasa nada! :) – Iznogood

7

Es simple.

Uso htaccess reescritura y redirigir todas las peticiones en una página estática temporal en lugar de enviarlos a bootstrap o index archivo

+0

Gracias. Siempre es difícil para mí editar '.htaccess' :) ¿Hay alguna forma en Zend Framework? – Student

+0

No debería ser difícil. simplemente abra .htaccess estará en la carpeta raíz y edítelo –

7

La regla de reescritura en las rutas de archivos .htaccess todo el tráfico a través de index.php, así que si no se puede cambiar .htaccess simplemente coloca la siguiente línea en tu index.php antes de cualquier cosa relacionada con ZF.

$maintenanceStart = new DateTime('2012-01-01 00:00:00'); 
$maintenanceEnd = new DateTime('2012-01-01 01:00:00'); 
$now = new DateTime; 
if ($now > $maintenanceStart && $now < $maintenanceEnd) { 
    fpassthru('/path/to/your/maintenancePage.html'); 
    exit; 
} 

De esta forma, ninguno de los códigos relacionados con ZF se ejecutará durante la ventana de mantenimiento.

Cuestiones relacionadas