So verwalten Sie mehrere Anwendungen in CodeIgniter

Heute werden wir untersuchen, wie Sie mehrere Anwendungen im CodeIgniter-Web-Framework mit einer einzigen Codebase verwalten können. Im Zuge dessen werden wir zwei verschiedene CodeIgniter-Anwendungen erstellen, die die Codebasis Core CodeIgniter gemeinsam nutzen.

Die gemeinsame Nutzung der Kerncodebase für verschiedene Anwendungen ist nicht neu, da sie bereits von verschiedenen Frameworks und Open-Source-Systemen praktiziert wird, und CodeIgniter unterscheidet sich nicht. Auf diese Weise können Sie problemlos mehrere Anwendungen verwalten, die die CodeIgniter-Kernbibliothek und die API-Dateien gemeinsam nutzen. Gleichzeitig können Sie verschiedene Datenbanken und standortspezifische Konfigurationen verwenden.

Zu Beginn werden wir die Vorteile des Multisite-Setups durchgehen und im weiteren Verlauf eine praktische Demonstration zeigen, was erforderlich ist, um mehrere Anwendungen im CodeIgniter-Framework einzurichten.

Vorteile des Multisite-Setups

In diesem Abschnitt werden einige Vorteile eines Multisite-Setups hervorgehoben.

Einer der offensichtlichsten Vorteile, auf den ich gleich hinweisen könnte, ist, dass das Multisite-Setup eine gemeinsame Codebase verwendet, und dies sollte die Upgrade- und Wartungsprozesse Ihrer Anwendung erheblich vereinfachen.

Nehmen wir zum Beispiel an, Sie haben zehn verschiedene CodeIgniter-Anwendungen, die unter Ihrem Gürtel laufen. Sie haben gerade erfahren, dass eine neue Version des CodeIgniter-Frameworks für ein Upgrade verfügbar ist, und Sie möchten das Upgrade so schnell wie möglich durchführen, um sicherzustellen, dass der Code sicher und stabil bleibt.

Wenn Sie für jede Ihrer Anwendungen eine eigene Codebase hätten, wäre es definitiv ein langwieriger Prozess, jede einzelne Site durchzugehen und sie nacheinander zu aktualisieren. Mit dem Multisite-Setup müssen Sie dies nur einmal tun, da die Kerncodebase von allen Sites gemeinsam genutzt wird!

Als Nächstes können Sie für jede Anwendung eine andere Datenbank verwenden, obwohl sie eine gemeinsame Codebase verwenden. In der Tat ist dies einer der beliebtesten Anwendungsfälle für die Einrichtung von Multisites!

Abgesehen davon, dass Sie für jede Anwendung eine andere Datenbank verwenden, können Sie ein Setup erstellen, das dieselbe Datenbank verwendet, jedoch ein anderes Design oder Layout im Frontend.

Wenn Sie immer noch den FTP-basierten Ansatz verwenden, um Ihre Site-Dateien auf den verschiedenen Servern zu verschieben, würde ich sagen, dass Sie den Multisite-Ansatz lieben werden, da er Ihre Arbeit stark reduziert!

So erstellen Sie mehrere Anwendungen

In diesem Abschnitt richten wir die grundlegende Verzeichnisstruktur ein, um ein Setup für mehrere Standorte zu implementieren.

Erstellen Sie im Stammverzeichnis Ihrer CodeIgniter-Anwendung ein Anwendungen Verzeichnis. Dies ist das Hauptverzeichnis, in dem unsere verschiedenen Anwendungen gespeichert werden.

Als Nächstes erstellen Sie zwei neue Verzeichnisse-Anwendungen / app_one und anwendungen / app_two. Natürlich können Sie es so benennen, wie Sie es wünschen, aber ich halte es für jetzt einfach.

Wie Sie sehen, werden wir also zwei verschiedene Anwendungen einrichten, die die einzige Codebase des CodeIgniter-Frameworks verwenden. Obwohl das Setup für mehrere Standorte die meisten CodeIgniter-Framework-Dateien wiederverwenden wird, müssen noch einige Dateien und Verzeichnisse für jede einzelne von uns erstellte Anwendung dupliziert werden.

Lassen Sie mich schnell die Dateien und Verzeichnisse auflisten, die Sie zuerst aus der Standardanwendung kopieren sollten.

Kopieren Sie die folgenden Verzeichnisse aus dem Standardanwendungsverzeichnis nach Anwendungen / app_one und anwendungen / app_two:

  • Zwischenspeicher
  • Konfig
  • Protokolle

Wie Sie sehen können, ist es offensichtlich, separate Verzeichnisse für Zwischenspeicher und Protokolle für jede Anwendung. Und das Konfig Das Verzeichnis ist ein Muss für das Funktionieren Ihrer CodeIgniter-Anwendung. Wir werden es also trotzdem kopieren.

Als nächstes kopieren wir ein paar Dateien zusammen mit den erforderlichen Verzeichnissen, die es uns ermöglichen, unsere Multisite-Anwendung zu testen.

Kopieren Sie die folgenden Dateien in unser app_one und app_two Anwendungen aus der Standardanwendung CodeIgniter:

  • Steuerungen / welcome.php
  • Ansichten / Fehler
  • views / welcome_message.php

Für Ihre schnelle Referenz die Steuerungen / welcome.php Die Datei sollte folgendermaßen aussehen:

 * @sehe https://codeigniter.com/user_guide/general/urls.html * / public function index () $ this-> load-> view ('welcome_message'); 

Und das views / welcome_message.php Datei sollte aussehen.

    Willkommen bei CodeIgniter    

Willkommen bei CodeIgniter! Sie durchsuchen die Anwendung Eins!

Die von Ihnen betrachtete Seite wird von CodeIgniter dynamisch generiert.

Wenn Sie diese Seite bearbeiten möchten, finden Sie sie unter:

application / views / welcome_message.php

Den entsprechenden Controller für diese Seite finden Sie unter:

Anwendung / Steuerungen / Welcome.php

Wenn Sie CodeIgniter zum ersten Mal erkunden, sollten Sie zunächst das Benutzerhandbuch lesen.

In gerenderte Seite verstrichene Zeit Sekunden. '. CI_VERSION. '': "?>

Natürlich sollten Sie die folgende Meldung in der Ansichtsdatei ändern, damit wir die Anwendung während des Tests unterscheiden können.

Zum applications / app_one / views / welcome_message.php, es sollte so aussehen:

Willkommen bei CodeIgniter! Sie durchsuchen die Anwendung Eins!

Und für Anwendungen / app_two / views / welcome_message.php, es sollte so aussehen:

Willkommen bei CodeIgniter! Sie durchsuchen die Anwendung Zwei!

Nun haben wir alles in Bezug auf unser Multisite-Setup getan. Es funktioniert jedoch noch nicht sofort, da wir CodeIgniter immer noch über unser Multisite-Setup informieren müssen, da immer die Standardanwendung geladen wird, die sich in der befindet Anwendung Verzeichnis.

Feinschliff

Lassen Sie uns einen kurzen Blick auf die Einstellung werfen, die das Standardanwendungsverzeichnis konfiguriert. Mach weiter und öffne die index.php Datei im Stammverzeichnis Ihrer Anwendung und suchen Sie nach dem folgenden Code-Snippet.

/ * * ------------------------------------------- ---------------- * ANWENDUNGSVERZEICHNISNAME * ----------------------------- ---------------------------------- * * Wenn dieser Frontcontroller eine andere "Anwendung" verwenden soll * Verzeichnis als das Standardverzeichnis können Sie hier seinen Namen festlegen. Das Verzeichnis * kann auch an beliebiger Stelle auf Ihrem Server umbenannt oder verschoben werden. Wenn Sie dies tun, * verwenden Sie einen absoluten (vollständigen) Serverpfad. * Weitere Informationen finden Sie in der Bedienungsanleitung: * * https://codeigniter.com/user_guide/general/managing_apps.html * * KEIN TRAILING SLASH! * / $ application_folder = 'application';

Aus dem obigen Snippet ist ziemlich klar, dass Sie den Pfad Ihrer Standardanwendung festlegen können. Dies ist der Ort, an dem wir Änderungen vornehmen können, sodass die Standardanwendung aus einem anderen als dem Standardverzeichnis abgerufen wird.

Natürlich könnte man gleich weitermachen und so etwas tun, und das sollte laufen app_one Anwendung.

$ application_folder = 'applications / app_one';

Auf der anderen Seite, was würden Sie tun, wenn Sie laufen möchten app_two? Als Quickie könnten Sie das kopieren index.php Datei in index_app_one.php und index_app_two.php für jede Anwendung. Stellen Sie sicher, dass Sie die Änderungen in Ihrem virtuellen Host entsprechend vornehmen.

Andererseits ziehe ich einen etwas anderen Ansatz vor und möchte mich auf die ENV Variable zur Auswahl zwischen den verschiedenen Anwendungen zur Laufzeit.

Beispielsweise können Sie den Benutzer einrichten ENV Variable in NGINX wie im folgenden Snippet gezeigt.

// Setze die Umgebungsvariable CI_DEFAULT_APP in der "location" -Direktive von vhost fastcgi_param CI_DEFAULT_APP applications / app_one;

Wenn Sie den Apache-Webserver verwenden, können Sie Folgendes erreichen:

SetEnv CI_DEFAULT_APP-Anwendungen / app_one

Als nächstes überarbeiten wir den Code in der index.php Datei, die den Vorteil ausnutzt ENV Variable, um die Ausführung der Standardanwendung zu bestimmen.

... $ application_folder = (isset ($ _ SERVER ['CI_DEFAULT_APP'])? $ _SERVER ['CI_DEFAULT_APP']: 'application');… 

Wie Sie sehen, prüfen wir also die Existenz der CI_DEFAULT_APP ENV Variable in erster Linie, und wenn es nicht verfügbar ist, werden wir auf die Standardanwendung zurückgreifen.

Meistens möchten Sie Ihre verschiedenen Anwendungen in verschiedenen Domänen ausführen. Im Idealfall möchte ich für jede Anwendung zwei verschiedene virtuelle Hosts verwenden. Ein schnelles Beispiel für jeden virtuellen Host sollte im Kontext von NGINX so aussehen.

Die Domain www.ci-app-one.com verweist auf app_one:

Server listen YOUR_IP: 80; Servername www.ci-app-one.com; root / var / www / html; index index.html index.php; location ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; verfällt max;  location / # Überprüfen Sie, ob eine Datei- oder Verzeichnisindexdatei vorhanden ist, oder leiten Sie sie an die index.php weiter. try_files $ uri $ uri / /index.php;  location ~ \ .php $ root / var / www / html; fastcgi_split_path_info ^ (. + \. php) (. *) $; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / var / www / html $ fastcgi_script_name; fastcgi_param CI_DEFAULT_APP-Anwendungen / app_one; include fastcgi_params; 

In ähnlicher Weise verweist die Domäne www.ci-app-two.com auf app_two:

Server listen YOUR_IP: 80; Servername www.ci-app-two.com; root / var / www / html; index index.html index.php; location ~ * \. (jpg | jpeg | gif | css | png | js | ico | html) $ access_log off; verfällt max;  location / # Überprüfen Sie, ob eine Datei- oder Verzeichnisindexdatei vorhanden ist, oder leiten Sie sie an die index.php weiter. try_files $ uri $ uri / /index.php;  location ~ \ .php $ root / var / www / html; fastcgi_split_path_info ^ (. + \. php) (. *) $; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME / var / www / html $ fastcgi_script_name; fastcgi_param CI_DEFAULT_APP-Anwendungen / app_two; include fastcgi_params; 

Natürlich können Sie jetzt loslegen und Ihre Änderungen testen, um zu sehen, ob es wirklich funktioniert oder nicht! Zögern Sie nicht, mir Fragen zu stellen, wenn Sie Probleme haben.

Und das war die ziemlich einfache Möglichkeit, mehrere Anwendungen im CodeIgniter-Framework mit einer einzigen Codebase einzurichten.

Fazit

Heute haben wir einen interessanten Aspekt des CodeIgniter-Frameworks durchlaufen, mit dem Sie mehrere Anwendungen mit einer einzigen Codebase verwalten können. Die offensichtlichen Vorteile davon sind die einfache Aktualisierung und Wartung Ihrer vorhandenen Codebase.

CodeIgniter ist eine leistungsfähige PHP-Plattform. Egal, ob Sie gerade erst anfangen oder mit der nächsten Version beginnen, vergessen Sie nicht, zu prüfen, was wir für Sie zur Verfügung haben.

Teilen Sie Ihre Gedanken mit, wenn Sie bereits etwas Ähnliches implementiert haben oder sich etwas anders damit befasst hätten. Auf jeden Fall würde ich gerne Ihre Gedanken hören!