我正在使用zend框架。有時我想禁用或關閉我的網站以進行特定的維護。那麼如何阻止人們在需要時訪問我網站的任何頁面?如何在zend框架中禁用特定時間的網站?
Zend Framework中的瓶頸在哪裏,我可以停止所有請求並停止用戶繼續。
謝謝
我正在使用zend框架。有時我想禁用或關閉我的網站以進行特定的維護。那麼如何阻止人們在需要時訪問我網站的任何頁面?如何在zend框架中禁用特定時間的網站?
Zend Framework中的瓶頸在哪裏,我可以停止所有請求並停止用戶繼續。
謝謝
這樣做的難點在 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);
}
}
這樣,您就可以啓用維護模式,只需通過修改配置項。
很簡單。
使用htaccess
重寫和重定向一個靜態的臨時頁面上的所有請求,而不是通過index.php文件將它們發送到bootstrap
或index
文件
謝謝。我總是很難編輯'.htaccess' :)在zend框架中有沒有? – Student 2011-12-31 10:21:20
它不應該是困難的。只需打開.htaccess它將在根文件夾中,並編輯它 – 2011-12-31 22:42:23
在.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相關的代碼。
@Iznogood:感謝您的編輯。 D'哦! ;-) – 2012-01-01 02:49:14
沒有問題發生! :) – Iznogood 2012-01-01 02:58:42