2011-12-31 93 views
6

我正在使用zend框架。有時我想禁用或關閉我的網站以進行特定的維護。那麼如何阻止人們在需要時訪問我網站的任何頁面?如何在zend框架中禁用特定時間的網站?

Zend Framework中的瓶頸在哪裏,我可以停止所有請求並停止用戶繼續。

謝謝

回答

7

這樣做的難點在 ZF應用程序是大概你的維護將影響應用程序本身。因此,如果應用程序在維護期間「中斷」,則風險是「應用程序內」解決方案也可能會中斷。從這個意義上講,修改.htaccess或調整文件等「外部」方法可能更加健壯。

但是,「應用內」方法可以使用前端控制器插件。在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'); 
     } 
    } 
} 

然後在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); 
} 

在實踐中,你可能要推的開始/結束時間長達配置。在application/configs/application.ini

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

然後,你可以修改插件註冊的樣子:

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); 
    } 
} 

這樣,您就可以啓用維護模式,只需通過修改配置項。

+0

@Iznogood:感謝您的編輯。 D'哦! ;-) – 2012-01-01 02:49:14

+0

沒有問題發生! :) – Iznogood 2012-01-01 02:58:42

7

很簡單。

使用htaccess重寫和重定向一個靜態的臨時頁面上的所有請求,而不是通過index.php文件將它們發送到bootstrapindex文件

+0

謝謝。我總是很難編輯'.htaccess' :)在zend框架中有沒有? – Student 2011-12-31 10:21:20

+0

它不應該是困難的。只需打開.htaccess它將在根文件夾中,並編輯它 – 2011-12-31 22:42:23

7

在.htaccess文件路徑重寫規則的所有流量的,所以如果你不能改變.htaccess只需在你的index.php之前的任何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; 
} 

這種方式在維護窗口期間不會執行ZF相關的代碼。