Ich habe mit Joomla und ich liebe seine Verwaltungs Anlage die Seite legen für die Wartung. Wie ich gesehen habe, werden alle Anfragen an die Site, wenn sie sich im Wartungsmodus befinden, an eine einzige Seite weitergeleitet. Wenn ich mein eigenes "Site Down for Maintenance" -Modul für eine Nicht-Joomla-Site hinzufügen möchte, wie mache ich das? Ich benutze ein MVC-Framework in PHP namens Kohana in seiner Version 2, die mit Codeigniter ähnlich ist. Ich habe eine Router-Klasse, wo ich kontrollieren kann, wohin eine bestimmte Adresse geht. Der einzige Ansatz, den ich denken kann, ist, jede Anfrage an eine bestimmte Controller-Funktion umzuleiten, wenn die Site nicht erreichbar ist, aber wie mache ich das? Ich kann unmöglich alle URLs manuell umleiten?Ansatz für „site wegen Wartungsarbeiten“
Antwort
Kohana 3: Sie können eine Catch-all-Route in Ihrem bootstrap.php
vor den Kohana::modules()
Linien definieren:
if (/* check if site is in under maintenance mode */) {
Route::set('defaulta', '(<id>)', array('id' => '.*'))
->defaults(array(
'controller' => 'errors',
'action' => 'maintenance',
));
}
Oder Sie können sogar Schlamassel mit der Bitte, das gleiche zu tun:
if (/* check if site is in under maintenance mode */) {
echo Request::factory('errors/maintenance')
->execute()
->send_headers()
->response;
}
Kohana 2: Sie müssten Controller
erweitern und die 'unter Wartung' behandeln e‘Seite Anzeige im Konstruktor (aber Sie müssen sicherstellen, dass alle Ihre Controller diesen Controller-Klasse erweitern anstelle der Vanille-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;
}
}
}
Oder Sie können sogar das Hakensystem nutzen, es zu tun, durch eine Zugabe Datei in Ihrem hooks
Ordner (stellen Sie sicher, dass Sie ermöglichen Haken in Ihrem 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'));
}
}
wie Sie sehen können, gibt es tatsächlich viele Möglichkeiten, wie man Sachen in Kohana zu tun, weil es ein sehr flexibles PHP-Framework ist :)
Sie könnten ein Datenbankflag in einem gemeinsamen Header überprüfen (vermutlich haben Sie ein gemeinsames Include, das eine Verbindung zur Datenbank usw. herstellt), und wenn das Flag gesetzt ist, rendern Sie eine bestimmte Seite und beenden Sie (alles tun) die üblichen Aufräumarbeiten wie das Schließen von Datenbankverbindungen usw.).
Werfen Sie einen Blick auf die Routing-documentation. Sie sollten in der Lage sein, einen regulären Ausdruck zu verwenden, der jedes uri zu einem bestimmten Controller/Aktion umleitet. Die einzige verbleibende Frage wäre, wie diese Regel ein- und ausgeschaltet werden könnte.
Ich denke an zwei Ideen kann dies geschehen zu lassen.
Wie Larry sagte, verwenden Sie reguläre Ausdrücke, um alle Anfragen an einen bestimmten Ort umzuleiten. Zuerst würden Sie feststellen, ob sich die Site im Wartungsmodus befindet (wahrscheinlich mit einem Datenbankflag oder einer Konfigurationsdateieinstellung). Wenn dies der Fall ist, verwenden Sie die Funktion für reguläre Ausdrücke des Routings, um den gesamten Datenverkehr an eine Stelle umzuleiten.
Sie überprüfen können, ob die Website im Wartungsmodus in den Konstruktor jeder Controller war und je nach Bedarf umgeleitet werden. Dies ist wahrscheinlich nicht die optimale Lösung, da Sie für jeden Controller den gleichen Code wiederholen würden. Also, obwohl es funktionieren würde, wären Sie wahrscheinlich mit den regulären Ausdrücken besser dran.
Routing in Kohana: http://docs.kohanaphp.com/general/routing
PHP Reguläre Ausdrücke: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
Controller in Kohana: http://docs.kohanaphp.com/general/controllers
Sie laufen mit dem Apache? Fügen Sie diese auf Ihre .htaccess
Datei in Ihrem Web-Root-Verzeichnis (oder auf die vhost Erklärung für die Website) alle Anforderungen an eine „unter Wartung“ Seite zu umleiten:
Redirect 301//maintenace_page.html
das wäre gut, aber kann ich das mit einem PHP-Skript ausschalten, wenn ich will? – yretuta
Sicher. Einfach ein PHP Skript editieren .htaccess und ersetzen 'Redirect 301// maintenace_page.html' mit '#Redirect 301// maintenace_page.html' - das '#' bezeichnet eine Kommentarzeile, und die Weiterleitung wird nicht ausgeführt. – leepowers
In index.php eine Konstante genannt define IN_MAINTENANCE
erstellen Rückruf wie so in einem hook file:
function in_maintenance()
{
if(IN_MAINTENANCE)
{
Router::$controller = 'my_maintenance_controller';
Router::$method = 'index';
}
}
Und es wie in den system.post_routing Ereignis hinzuzufügen.
Event::add('system.post_routing', 'in_maintenance');
Wenn Sie Ihre Website hochladen, den Wert von IN_MAINENANCE auf TRUE und alle Anforderungen an Ihre Wartung werden ändern Seite umgeleitet.
Weitere Informationen zum Erstellen eines Hooks finden Sie unter Event/Hook documentation.
Eine andere Methode zum Umschalten besteht darin, nach einer Datei zu suchen: Wenn sie existiert, beginnt die Wartung, also schalten Sie die Seite aus.
Wenn ja, können Sie eines der oben genannten Dinge tun.
Ich mag diese Idee. +1 – Abinadi