"bakım için site için" yaklaşımı

7 Cevap php

Joomla kullanıyorum ve ben bakım için siteyi bastırmak için idari tesis seviyorum. Gördüğüm gibi, siteye tüm istekleri bu bakım modunda ise tek bir sayfaya yönlendirilir. Ben olmayan bir Joomla site için modül "bakım için aşağı sitesi" kendi eklemek istiyorsanız, bunu nasıl yapabilirim? Ben Codeigniter ile benzer olan sürüm 2 Kohana denilen PHP MVC framework kullanıyorum. Belirli bir adres nereye ben kontrol edebilirsiniz Router sınıf var. Bence tek yaklaşımdır site kapalı olduğu zaman, belirli bir denetleyici fonksiyona her isteğini yönlendirmek olduğunu, ama bunu nasıl yapabilirim? Ben belki elle yeniden rota tüm adresler doğru değil mi?

7 Cevap

Kohana 3: You can define a catch-all route in your bootstrap.php before the Kohana::modules() lines:

if (/* check if site is in under maintenance mode */) {
    Route::set('defaulta', '(<id>)', array('id' => '.*'))
    	->defaults(array(
    		'controller' => 'errors',
    		'action'     => 'maintenance',
    	));
}

Ya da aynı şeyi isteği ile karışıklık eşitlemek yapabilirsiniz:

if (/* check if site is in under maintenance mode */) {
    echo Request::factory('errors/maintenance')
    	->execute()
    	->send_headers()
    	->response;
}

Kohana 2: You would need to extend Controller and handle the 'under maintenance' page display in the constructor (but you need to make sure all your controllers extend this controller class instead of the vanilla one):

abstract class Custom_Controller extends Controller {

    public function __construct()
    {
    	parent::__construct();
    	if (/* check if site is in under maintenance mode */) {
    		$page = new View('maintenance');
    		$page->render(TRUE);
    		exit;
    	}
    }
}

Yoksa bile hooks klasördeki bir dosyayı ekleyerek, bunu yapmak için kanca sistemi kullanabilir (size kanca sağlamak emin olun sizin config.php):

Event::add('system.ready', 'check_maintenance_mode');

function check_maintenance_mode() {
    if (/* check if site is in under maintenance mode */) {
    	Kohana::config_set('routes', array('_default' => 'errors/maintenance'));
    }
}

Gördüğünüz gibi, bu çok esnek bir PHP çerçeve çünkü Kohana bölgesinde şeyler yapmak nasıl aslında birçok yolu vardır :)

Yönlendirme bir göz atın documentation. Belirli bir denetleyicisi / eylem için herhangi bir uri yönlendirir normal bir ifade kullanmak gerekir. Geriye tek soru açık / kapalı olduğunu kuralı açmak için nasıl olacak.

Bir ortak başlığında bir veritabanı bayrağı kontrol edebilir (muhtemelen var, bazı ortak veritabanı vb bağlanır, hangi dahil), ve bayrağı ayarlanırsa, her zamanki temizleme şeyler yapmak için emin (belirli bir sayfayı ve çıkış işlemek gibi) vb veritabanı bağlantıları kapatılıyor.

Apache çalıştırıyor musunuz? "Altında bakım" sayfasına TÜM isteklerini yönlendirmek için web kök in .htaccess dosyası (veya site için vhost ilanına) Bu ekle:

Redirect 301 / /maintenace_page.html

Ben bu gerçekleşmesi için iki fikirler olabilir.

  1. Dedi Larry gibi, belirli bir konuma tüm isteklerini yönlendirmek için normal ifadeleri kullanabilirsiniz. Site olsaydı, tek bir yerde tüm trafiği yönlendirmek için yönlendirme düzenli ifade özelliğini kullanın, sonra (muhtemelen bir veritabanı bayrağı veya bir yapılandırma dosyası ayarı kullanarak) bakım modunda olsaydı Yani, önce belirleyecek.

  2. Site her kontrolörün yapıcısı bakım modunda olup olmadığını kontrol edin ve gerektiği gibi yönlendirme olabilir. Her kontrolör için aynı kodu yinelenen zira bu muhtemelen en uygun çözüm değildir. Yani, işe yarayacağını bile, muhtemelen normal ifadeler ile daha iyi olurdu.

Kohana Yönlendirme: http://docs.kohanaphp.com/general/routing

PHP Düzenli ifadeler: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

Kohana denetleyicileri: http://docs.kohanaphp.com/general/controllers

Lütfen index.php IN_MAINTENANCE adında bir sabit tanımlamak

Böylece gibi bir geri oluşturma hook file:

function in_maintenance()
{
    if(IN_MAINTENANCE)
    {
         Router::$controller = 'my_maintenance_controller';
         Router::$method = 'index';
    }
}

Ve system.post_routing olayın içine olarak ekleyin.

Event::add('system.post_routing', 'in_maintenance');

Eğer sitenizin DOĞRU için IN_MAINENANCE değerini değiştirmek ve tüm istekleri bakım sayfasına yönlendirileceksiniz yüklediğinizde.

Event / Hook documentation bir kanca oluşturma hakkında daha fazla bilgi için bkz.

Bu geçiş diğer bir yöntem, bir dosya için kontrol etmektir: Varsa, bakım böylece site kapatmak başlıyor.

Eğer öyleyse, yukarıda bahsedilen şeylerden herhangi birini yapabilirsiniz.