3.1. Globale Daten

Die Hilfsklasse GhCoreGlobals bietet einige statische Methoden an, die sich mit globalen Daten (Formulardaten, Cookie- und Sessiondaten) sowie dem aufgerufenen Skript befassen. Die wichtigsten Funktionen werden hier vorgestellt.
Daten aus Formularen werden als GET oder POST Anfrage vom Browser an den Server übermittelt. Diese Daten stehen in PHP in den globalen Arrays "$_GET" bzw. "$_POST" zur Verfügung. Um den Zugriff auf diese Daten zu vereinfachen, bietet die Klasse GhCoreGlobals die statischen Methoden "GhCoreGlobals::get()" und "GhCoreGlobals::post()". Diese erwarten als ersten Parameter den Namen der Variablen. Der Name kann hierbei auch in Array-Schreibweise angegeben werden, so wie sie bei input-Elementen innerhalb eines Formulars möglich ist (z.B. "userdata[name]"). Die Methode löst die Array-Schreibweise auf und liefert die Daten aus der entsprechenden Position im Array. Als weiterer, optionaler Parameter kann der Methode ein Vorgabewert übergeben werden, der zurück geliefert wird, falls die globale Variable nicht existiert. Als dritter Parameter kann festgelegt werden, ob der Default-Wert als globale Variable gesetzt werden soll.
GET und POST Variablen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
require_once 'ghrpc/ghrpc.php'// oder 'ghgui/ghgui.php'

// POST-Wert "id" holen:
$itemId GhCoreGlobals::get('id');

// GET-Wert "view" holen:
// Falls der Wert nicht gesetzt ist wird "start" zurück geliefert.
$viewName GhCoreGlobals::get('view''start');

// POST-Wert "name" aus dem Array "user" holen:
// Falls der Wert nicht gesetzt ist, wird er auf "John Doe" gesetzt:
$name GhCoreGlobals::post('user[name]''John Doe'true);
echo 
$_POST['user']['name']; // Gibt "John Doe" aus
Analog zu "get()" und "post()" liefert die Methode "GhCoreGlobals::file()" Informationen über hochgeladene Dateien. Sie greift auf das globale PHP Array "$_FILES" zu, vereinfacht jedoch den Umgang bei Datei-Uploads, deren Name in Array-Schreibweise angegeben ist. Existieren in einem Formular beispielsweise drei input-Elemente vom Typ "file" mit dem Namen "attachment[]", so liefert "GhCoreGlobals::file('attachment')" einen Array mit drei Elementen, die jeweils die vom "$_FILES" Array bekannten Daten (z.B. "name" und "tmp_name") beinhalten (der Array "$_FILES" gruppiert die Daten aller Datei-Uploads etwas unpraktisch jeweils unter den Einträgen "name", "tmp_name" usw., sodass es ohne diese Hilfsmethode recht aufwändig ist, die Daten mehrerer hochgeladener Dateien einzeln auszulesen).
Die statische Methode "GhCoreGlobals::cookie()" arbeitet analog zu den Methoden "get()" und "post()", liefert bzw. setzt jedoch Werte in einem Cookie des Browsers.
Entsprechend zu den Methoden "get()", "post()" und "cookie()" liefert bzw. setzt die statische Methode "GhCoreGlobals::session()" Werte in der PHP Session.
Darüber hinaus bietet die Klasse GhCoreGlobals jedoch einige zusätzliche Methoden zum Session-Handling an. Die Methode "GhCoreGlobals::startNewSession()" erzeugt eine neue Session. Als Parameter werden der Name des Session-Cookies sowie dessen Lebensdauer und die Domain, auf die der Cookie im Browser registriert wird, übergeben. Der Vorgabewert für den Namen des Cookies ist "sid" (für "session id"), die Vorgabe-Lebensdauer ist 0. Ein Wert von 0 für die Lebensdauer des Cookies bedeutet, dass der Cookie wieder gelöscht wird wenn der Browser beendet wird. Die Cookie-Domain ist als Vorgabe nicht gesetzt. Sie kann angegeben werden, wenn auf einem Server unter verschiedenen Subdomains oder in verschiedenen Verzeichnissen unterschiedliche Web-Anwendungen laufen, die alle denselben Cookie-Namen für die Session verwendet. Normalerweise wird der Cookie anhand des Domain-Namens gespeichert. Mit den Vorgabewerten wird z.B. für den Server "localhost" ein Cookie mit dem Namen "sid" gespeichert, um die Session zu identifizieren. Werden unter "http://localhost/app1" und "http://localhost/app2" unterschiedliche Webanwendungen angeboten, die beide ihre Session über einen Cookie namens "sid" identifizieren, so mischen sich die Sessiondaten, da der Browser für beide Anwendungen denselben Cookie und damit dieselbe PHP Session verwendet. Wird in der ersten Web-Anwendung als Cookie-Domain "localhost/app1" und in der zweiten als Cookie-Domain "localhost/app2" angegeben, so speichert der Browser für jede der beiden Anwendungen getrennte Cookies.
Die Methode "GhCoreGlobals::continueSession()" nimmt eine Session wieder auf. Der erste Parameter gibt den Namen des Session-Cookies an, die Vorgabe ist auch in dieser Methode "sid". Als zweiter Parameter kann angegeben werden, ob eine neue Session gestartet werden soll, falls für diesen Cookie noch keine Session vorliegt. Die beiden weiteren Parameter geben die Cookie-Lebensdauer und die Cookie-Domain an und entsprechen denen der Methode "startNewSession()". Der Rückgabewert der Methode ist der Zeitpunkt des letzten Zugriffs auf die Session (als Unix-Zeitstempel). Ist dieser Wert 0, so existiert die Session noch nicht.
Prinzipiell muss also die Methode "startNewSession()" nicht verwendet werden. Es kann stattdessen auch "continueSession()" verwendet und der zweite Parameter auf "true" gesetzt werden. Ein Fall, in dem man diesen Automatismus möglicherweise nicht nutzen möchte, wäre eine Web-Anwendung mit einer Login-Seite, z.B.:
Login mit Session:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
require_once 'ghrpc/ghrpc.php'// oder 'ghgui/ghgui.php'

// Prüfen, ob bereits eine Session vorliegt (der Benutzer eingeloggt ist):
if(GhCoreGlobals::continueSession())
  
showMyWebApp(); // Web-Anwendung anzeigen, da der Benutzer eingeloggt ist
// Falls nicht, prüfen ob ein erfolgreiches Login abgesendet wurde:
elseif(checkLogin(GhCoreGlobals::post('login'), GhCoreGlobals::post('password')))
{
  
// Neue Session starten:
  
GhCoreGlobals::startNewSession();
  
// Falls Login und Passwort noch benötigt werden (z.B. für externe Dienste),
  // dann können sie in der Session gespeichert werden:
  
GhCoreGlobals::session('login'GhCoreGlobals::post('login'), true);
  
GhCoreGlobals::session('password'GhCoreGlobals::post('password'), true);
  
// Web-Anwendung anzeigen:
  
showMyWebApp();
}
else
  
showLoginPage(); // Login-Seite anzeigen
Schließlich kann über die Methode "GhCoreGlobals::destroySession()" die Session explizit gelöscht werden. Dies leert die Session-Daten und markiert den Session-Cookie als abgelaufen.
Die Methode "GhCoreGlobals::getScript()" liefert die URL des aufgerufenen Skripts zurück.
Die Methode "GhCoreGlobals::getQuery()" kann genutzt werden, um eine veränderte Version der aktuell aufgerufenen URL zu erhalten. Der erste Parameter legt fest, ob die folgenden Parameter von den GET-Variablen der URL entfernt werden sollen oder nicht. Alle darauf folgenden Parameter (beliebiger Anzahl) werden als GET-Parameter angegeben, d.h. entweder als Name einer GET-Variable oder als Variable und Wert mit einem Gleichheitszeichen dazwischen:
GhCoreGlobals::getQuery():
1
2
3
4
5
6
7
8
9
10
<?php
require_once 'ghrpc/ghrpc.php'// oder 'ghgui/ghgui.php'

// GET-Parameter "login" und "password" aus der URL entfernen:
$urlWithoutLogin GhCoreGlobals::getScript() . GhCoreGlobals::getQuery(true'login''password');
echo 
$urlWithoutLogin '<br>';

// den GET-Parameter "page" auf einen bestimmten Wert ändern:
$pageUrl GhCoreGlobals::getScript() . GhCoreGlobals::getQuery(false'page=23');
echo 
$pageUrl '<br>';