2011-12-31 8 views
6

मैं ज़ेंड फ्रेमवर्क का उपयोग कर रहा हूं। कभी-कभी मैं रखरखाव के लिए विशिष्ट समय के लिए अपनी साइट को अक्षम या नीचे करना चाहता हूं। तो जब आवश्यक हो तो मैं लोगों को अपनी साइट के किसी भी पेज तक पहुंचने के लिए कैसे रोक सकता हूं?ज़ेंड फ्रेमवर्क में विशिष्ट समय के लिए वेबसाइट को कैसे अक्षम करें?

ज़ेंड फ्रेमवर्क में बाधा कहां है जहां मैं सभी अनुरोधों को रोक सकता हूं और उपयोगकर्ता को आगे बढ़ने से रोक सकता हूं।

धन्यवाद

उत्तर

7

के भीतर ऐसा करने का मुश्किल हिस्सा ZF ऐप यह है कि संभवतः आपका रखरखाव ऐप को प्रभावित करेगा। इसलिए, यदि रखरखाव के दौरान ऐप "टूटा हुआ" है, तो जोखिम यह है कि "इन-एप" समाधान भी टूट सकता है। उस अर्थ में, "बाहरी" दृष्टिकोण जैसे .htaccess संशोधित करना या public/index.php फ़ाइल को ट्वीव करना शायद अधिक मजबूत है।

हालांकि, एक "इन-ऐप" दृष्टिकोण फ्रंट-कंट्रोलर प्लगइन का उपयोग कर सकता है। 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); 
} 

अभ्यास में, आप config अप करने के लिए प्रारंभ/समाप्ति बार पुश करने के लिए चाहते हो सकता है। application/configs/application.ini में: बस संपादन config प्रवेश द्वारा

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

इस तरह, आप रखरखाव मोड सक्षम कर सकते हैं:

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

तो फिर तुम प्लगइन पंजीकरण तरह देखने के लिए संशोधित कर सकते हैं।

+0

@Iznogood: संपादन के लिए धन्यवाद। डी 'ओह! ;-) –

+0

कोई समस्या नहीं होती है! :) – Iznogood

7

यह आसान है।

उपयोग htaccess पुनर्लेखन और index.php के माध्यम से

+0

धन्यवाद। 'Htaccess'' को संपादित करना हमेशा मुश्किल होता है :) क्या ज़ेंड फ्रेमवर्क में वैसे भी है? – Student

+0

यह मुश्किल नहीं होना चाहिए। बस खोलें। htaccess यह रूट फ़ोल्डर में होगा, और इसे संपादित करें –

7

.htaccess फाइल मार्गों में पुनर्लेखन नियम समस्त ट्रैफ़िक पर bootstrap या index फ़ाइल उन्हें भेजने के बजाय एक स्थिर अस्थायी पृष्ठ पर सभी अनुरोध को रीडायरेक्ट, इसलिए यदि आप बदल नहीं सकते .htaccess किसी भी ZF से संबंधित सामग्री से पहले बस अपनी index.php में निम्न पंक्ति डाल दें।

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

इस तरह रखरखाव खिड़की के दौरान जेडएफ संबंधित कोड में से कोई भी निष्पादित नहीं होगा।

संबंधित मुद्दे