Startup-Phase

Bevor die Alvine-Anwendungsklasse geladen werden kann, müssen einige Vorbereitungen getroffen werden. hierzu zählen das Laden des Alvine-Frameworks, der Environmentvariablen und die Fehlerbehandlung.

Die Steuerung dieser Phase übernimmt die Ignition-Klasse. In den beiden Konfigurationsdateien assembly.ini (im Systemverzeichnis /default/) und system.ini (im Projektverzeichnis /config/) stehen die dazu notwendigen Einstellungen. In der assembly.ini stehen die Verwendeten Komponenten und über die system.ini wird der Startup-Prozess gesteuert.

Der Speicherort der system.ini muss über die Umgebungsvariable ALVINE_CONFIG definiert werden. Dies kann entweder über den Webserver oder die verwendete Shell erfolgen.

Über additional-components können in der assembly.ini optionale Phar-Archive angegeben werden. Diese können über Assembly::includeLibrary($name) eingebunden werden.

Dateisystem

Die einzelnen Speicherorte der Dateien können von System zu System variieren. Aus diesem Grund kann man in der system.ini in der Sektion filesystem die Verzeichnisse festlegen.

[filesystem]

; Hier liegt das Standardsystem (readonly)
; Default: /opt/alvine-platform/
basePath=C:\projekte\svn\alvine.application.platform\application

; Phar-Archive, externe Bibliotheken
; Default: /opt/vendor/
vendorPath=C:\projekte\svn\alvine.application.platform\deployment\vendor

Units

Die einzelnen Einheiten sind Objekte die in der definierten Reihenfolge erstellt werden und deren Unit::run() Methode im Anschluß aufgerufen wird.

!!! "note" Wichtig Solange das Alvine Framework noch nicht geladen wurde, können in den Units nur PHP-Core-Funktionen verwendet werden.

DisableStaticResource

Diese Einheit ist für die Verwendung mit dem in den PHP-Interpreters integrierten Webservers gedacht. hierzu werden nur PHP-Resourcen verarbeitet und bei allen anderen Anfragen return false zurückgeliefert. Das false sorgt dafür, das der interne Webserver von PHP die Resource statisch ausliefert.

Wird diese Einheit bei nginx oder apache verwendet, so liefert Sie den Status 404 Fehler zurück.

Diese Einheit besitzt in der system.ini keinen weiteren Konfigurationsblock.

Dummy

Diese Einheit exitiert für das Testing und debugging. Die Dummy::run() Methode zählt alle aufrufe und stellt die Anzahl der Aufrufe in der Dummy::isCalled() bereit.

FlushLogger

Die FlushLogger Einheit ruft die Methode \Alvine\Util\Logging\Logger::flush() auf.

Diese Einheit besitzt in der system.ini keinen weiteren Konfigurationsblock.

InitLegacyConstants

Im Legacy-System wird mit einer Vielzahl von Konstanten gearbeitet, diese können über diese Einheit definiert und angelegt werden. Die zu definierenden Konstanten werden im Abschnitt InitLegacyConstants als Schlüssel-/Wertpaare angelegt.

[InitLegacyConstants]
ALVINE_LEGACY_APPLICATION_BASE_PATH=/opt/alvine-platform
ALVINE_LEGACY_APPLICATION_BASE_WEB_ABSOLUTE_PATH=/srv/www

Die definierten Schlüssel werden als Konstante definiert. dazu wird der Schlüssel und der Wert an die Methode \define() übergeben.

IncludeComponents

Diese Einheit bindet die Alvine-Komponenten als Phar-Archive ein. Die einzubindenden Komponenten werden im Abschnitt components in der assembly.ini definiert.

; Komponenten die eingebunden werden sollen
[components]
component[] = alvine.framework-snapshot.phar
component[] = alvine.application-snapshot.phar

Die Dateien werden im Vendorverzeichnis im Unterordner alvine erwartet.

IncludeComponentsSource

Die IncludeComponentsSource-Einheit hilft bei der Entwicklung von Komponenten und Anwendungen. Sie ermglicht es die Alvine-Komponenten als Quelltext und nicht als Phar einzubinden. Die einzubindenden Komponenten werden im Abschnitt components in der assembly.ini definiert. In der Einheit wird der -snapshot.phar Teil entfernt und die bootstrap.inc.php der Komponente eingebunden.

; Komponenten die eingebunden werden sollen
[components]
component[] = alvine.framework-snapshot.phar
component[] = alvine.application-snapshot.phar

Der Pfad der Projekte wird über den Schlüssel path in der Sektion IncludeComponentsSource definiert

[IncludeComponentsSource]
; Pfad in dem die ausgecheckten Repos liegen
path=C:\projekte\svn\

InitCliAssemblyAndExecute

Die Einheit InitCliAssemblyAndExecute erstellt eine Instanz der Assembl-Klasse und initialisiert die Anwendung. In der system.ini muss diese Einheit auf cli beschränkt werden.

; CLI Anwendung im Kontext CLI ausführen
InitCliAssemblyAndExecute=cli

Über die Sektion InitCliAssemblyAndExecute muss der Name der Anwendungsklasse definiert werden. Über den Schlüssel directories können Verzeichnisse definiert werden, in denen Eigenschaftdateien liegen. Diese Dateien werden dann eingelesen und überschreiben die Werte aus der Default assemply.properties

[InitCliAssemblyAndExecute]
; Der Namespace muss vorher über
; RegisterApplicationNamespace oder
; RegisterCustomisationNamespaces registriert 
; worden sein
class=\Alvine\Application\Platform\Command

; Verzeichnisse, in denen nach Konfigurationswerten gesucht wird.
; Die Verzeichnisse müssen Unterverzeichnisse von config sein.
; Die einzelnen Verzeichnisse werden in der Reihenfolge wie hier 
; aufgeführt ausgewertet. Die Dateien im Verzeichnis werden nach 
; dem Dateinamen sortiert und in dieser Reihenfolge ausgewertet. 
directories=generally,cli

; Soll der Cache deaktiviert werden
; Diese Einstellung sollte mit Vorsicht geändert werden
; Bei deaktivertem Cache wird die Performance enorm beeinträchtigt.
disableCache=false

InitEnvironmentFromEnv

Diese Einheit liesst die externe Datei env.php ein. env.php muss in dem über den path Schlüssel definierten Verzeichnis liegen. In der env-Datei können Umgebungsvariablen definiert werden. Dies kann zum Beispiel auf Benutzerebene passieren, indem der Pfad relativ zum Benutzerverzeichnis angegeben wird. ~/alvine-platform.

!!! "warn" "Hinweis" Passwörter die über die diesen Weg angelegt werden, werden in Logausgaben des Startsystems maskiert und nicht ausgegeben. Man kann dies auch manuell ereichen, indem man die Umgebungsvariable mit dem Prefix ALVINE_PWD_ versieht.

Im Abschnitt InitEnvironmentFromEnv muss der Schlüssel path mit dem Pfad zur env.php angegeben werden.

[InitEnvironmentFromEnv]
; Pfad in dem die env.php liegt
; Diese Datei kann spezielle Environment-Daten enthalten
path=C:\projekte\etc\

Beispielaufbau der Dateien env.php und password.php:

<?php

/**
 * Werte setzen
 * 
 * @param string $key
 * @param string $value
 * 
 * @return void
 */
function setAlvineDevelopmentEnvironment(string $key, string $value): void {
    \putenv($key . '=' . $value);
    $_ENV[$key] = $value;
}

$localCredentialArray = [];

// Passwortdatei einbinden; Passwörter müssen in der Variable localCredentialArray stehen
include __DIR__ . DIRECTORY_SEPARATOR . 'passwd.php';

/**
 * Environment zuweisen
 */
if (isset($localCredentialArray) && \is_array($localCredentialArray)) {
    foreach ($localCredentialArray as $k => $v) {
        \setAlvineDevelopmentEnvironment($key = 'ALVINE_PWD_' . \strtoupper($k), $v);
    }
}

/** Zugriff auf das ADS */
setAlvineDevelopmentEnvironment('SERVER_URI', 'http://example.com');
setAlvineDevelopmentEnvironment('LOGLEVEL', 'ALL');

Die Passwörter sollten in der Passwortdatei stehen.

<?php
$localCredentialArray['service1_user'] = 'me';
$localCredentialArray['service1_password'] = 'geheim';

InitErrorReportingAndDebugging

Mit Hilfe der InitErrorReportingAndDebugging können die PHP-Einstellungen für die Fehlerausgabe und das Opcache gesteuert werden. Die Detailkonfiguration erfolgt über den Abschnitt InitErrorReportingAndDebugging.

!!! "warn" "Sicherheitshinweis" Diese Einheit sollte immer auf bestimmte IP-Adressen beschränkt werden und einen Parameter oder Cookie zur Steuerung verwenden.

[InitErrorReportingAndDebugging]
; Entwickeln und/oder Debugging der Anwendung über die HTTP-Schnittstelle
; Wenn die Anwendung im Debug-Modus ist, wird der Cache deaktiviert und
; es werden mehr Informationen ausgegeben.

; Anzeigen der PHP Fehlermeldungen. Die Codes sind hier zu entnehmen:
; http://php.net/manual/de/errorfunc.constants.php
; 32767 sind alle Meldungen; 0 Keine Meldungen
errorReportingLevel=32767

; Sollen PHP-Fehlermeldungen angezeigt werden
displayErrors=true


; Soll der Opcache während des Debuggings geleert werden
; Wichtig: Diese Einstellung kann große Auswirungen auf die
; Performance haben.

; Funktioniert nur, wenn in PHP Opcache aktiviert ist
clearOpcache=false


; Die Debug-Funktion ist auf die hier aufgeführten IP-Adressen 
; beschränkt. Wichtig bei der Verwendung von Proxies: Die IP-Adresse
; des Clients muss weitergereicht werden. Folgende Felder werden
; ausgewertet: X-Forwarded-For

; Die IP-Adresse kann IPV4 oder IPV6 sein
; werden keine IP-Adressen angegeben, so arbeiten
; die Einstellungen für alle Adressen.
limitToIP[]=::1
limitToIP[]=127.0.0.1
;limitToIP[]=

; Wird kein Cookie oder kein Parameter definiert, so
; Wird bei allen IP-Adressen das Debugging eingeschalten.

; Name des Cookies, der die Anwendung
; in den Debug-Modus schaltet.
enableByCookie=
; Name des Parameters, der die Anwendung
; in den Debug-Modus schaltet.
enableByParameter=debug

InitWebAssemblyAndExecute

Die Einheit InitWebAssemblyAndExecute erstellt eine Instanz der Assembly-Klasse und initialisiert die Anwendung. In der system.ini muss diese Einheit auf http beschränkt werden.

; CLI Anwendung im Kontext CLI ausführen
InitWebAssemblyAndExecute=http

Über die Sektion InitWebAssemblyAndExecute muss der Name der Anwendungsklasse definiert werden. Über den Schlüssel directories können Verzeichnisse definiert werden, in denen Eigenschaftdateien liegen. Diese Dateien werden dann eingelesen und überschreiben die Werte aus der Default assemply.properties

[InitWebAssemblyAndExecute]
; Der Namespace muss vorher über
; RegisterApplicationNamespace oder
; RegisterCustomisationNamespaces registriert 
; worden sein
class=\Alvine\Application\Platform\Web

; Verzeichnisse, in denen nach Konfigurationswerten gesucht wird.
; Die Verzeichnisse müssen Unterverzeichnisse von config sein.
; Die einzelnen Verzeichnisse werden in der Reihenfolge wie hier 
; aufgeführt ausgewertet. Die Dateien im Verzeichnis werden nach 
; dem Dateinamen sortiert und in dieser Reihenfolge ausgewertet. 
directories=generally,http

; Soll der Cache deaktiviert werden
; Diese Einstellung sollte mit Vorsicht geändert werden
; Bei deaktivertem Cache wird die Performance enorm beeinträchtigt.
disableCache=false

RegisterApplicationNamespace

Die Einheit RegisterApplicationNamespace registriert den Anwendungsnamespace.

Diese Einheit besitzt in der system.ini keinen weiteren Konfigurationsblock.

RegisterCustomisationNamespaces

Die Einheit RegisterCustomisationNamespaces registriert einen projektspezifischen Namespace. Im Abschnitt RegisterCustomisationNamespaces müssen die Namespaces angegeben werden. Die Source-Dateien der Klasse müssen im CustomisationVerzeichnis im zum Namespace gehörenden Unterverzeichnis liegen.

[RegisterCustomisationNamespaces]
; Diese Namespaces werden registeriert
; Die Dateien müssen im Verzeichnis customissation 
; aus der filesystem-Sektion liegen
; Der Namespace kann beliebig gewählt werden.
namespace[]=\Customisation
; namespace[]=\Customisation2

ResolveHttpContentTypeMapping

Diese Einheit kommt nur bei fehlendem $_SERVER['HTTP_CONTENT_TYPE'] Wert zum Einsatz. Alvine erwartet den Content-Type im Feld $_SERVER['HTTP_CONTENT_TYPE']. Einige Installationen bieten aber nur die Variable $_SERVER['CONTENT_TYPE'] an. Diese Einheit kopiert den Inhalt von CONTENT_TYPE nach HTTP_CONTENT_TYPE.

Diese Einheit besitzt in der system.ini keinen weiteren Konfigurationsblock.

RunExternals

RunExternals erlaubt es beliebige externe Datein in den Startprozess zu integrieren. Der Pfad der externen Dateien wird im Abschnitt RunExternals im Schlüssel path angegeben.

[RunExternals]
; Externe Scripte in den Startupprozess integrieren
path[]=/usr/alvine-platform/example.php

SendAccessControlAllowOrigin

Die Einheit SendAccessControlAllowOrigin sendet den im Abschnitt SendAccessControlAllowOrigin definierten Wert value als Wert für den Access-Control-Allow-Origin-Header.

Wird kein Wert angegeben, so wird kein Header gesendet.

[SendAccessControlAllowOrigin]
; Wird kein Wert angegeben, so wird kein header gesendet
value=*