Globale PHP-Arrays

Umgebungs-Daten aus global vordefinierten Arrays

Einige vordefinierte PHP-Arrays liefern eine Reihe wichtiger Umgebungs-Daten. Art und Anzahl der Array-Elemente ist unterschiedlich je nach Betriebssystem und Version. Wichtige Angaben sind jedoch in jeder Version enthalten.
PHP-Umgebung Test von PHP, der Konfiguration und der Umgebung
$GLOBALS Vordefinierte Globale Arrays in PHP
$_ENV Betriebssystem-spezifische Daten
$_SERVER Daten zur Umgebung des Webservers
Konstanten Liste aller global definierten Konstanten (PHP & Module)
Spezielle Daten einzelner Script-Programme
$_COOKIE Die bei einem Client gesetzten Cookies
$_FILES Die mit upload auf den Server kopierten Dateien
$_GET Die mit GET übergebenen CGI-Parameter
$_POST Die mit POST übergebenen CGI-Parameter
$_REQUEST Eine Kombination anderer Arrays
$_SESSION PHP-Variable für die Dauer einer Client-Session
Konfiguration Konfigurations-Variable mit Einfluss auf Globale Arrays
Entwicklung Zugriff auf die Globalen Variablen
Verwandte Themen PHP-Arrays

Das Array   $GLOBALS

Dieses Array enthält die als 'global' definierten Arrays: Diese Daten sind von jedem PHP-Programm verwendbar. Auf dieser Seite finden sie ein eigenes Kapitel für jedes der hier angeführten Globalen Arrays.
Im Array $GLOBALS sind die Namen der Elemente ohne führendes $ Zeichen angeführt.
Je nach → Konfiguration werden die Arrays $_ENV und $_SERVER evtl. nur dann definiert, wenn sie auch verwendet werden.
Da PHP meist auf einem Webserver läuft, enthalten die globalen Arrays die Daten des Servers, nicht des eigenen (Client)-PC. Ausnahme: Ihr PC ist selbst der Webserver.
Viele Web-Programm-Pakete legen zusätzliche Globale Arrays an. So verwaltet man bequem häufig verwendete Daten für alle Programme einer Lösung.
Die Sicherung gegen Missbrauch ist allerdings relativ aufwändig.
Beispiele: Typo3 (Array / Objekt $GLOBALS['TSFE'] ), Drupal (Array / Objekt $GLOBALS['user'] ), usw.

Eine alternative Technik ist die Verwendung von → SESSION-Variablen.

Das Array   $_ENV

Anzahl und Art der im globalen Array $_ENV enthaltenen Daten sind stark von Konfiguration und Betriebssystem abhängig.
Am eigenen Server ist dieses Array für reine IntraWeb-Anwendungen recht praktisch.
Verwenden sie das Array jedoch keinesfalls für das öffentliche Internet: Darin sind kritische Angaben über Server, System und Konfiguration enthalten, deren Veröffentlichung ein großes Risiko darstellt. Außerdem sind solche PHP-Programme nicht portabel, weil Art und Existenz der Daten stark variieren und daher nicht zuverlässig sind.
In der PHP → Konfigurations-Datei php.ini wird in der Variablen variables_order festgelegt, ob das globale Array $_ENV überhaupt besetzt wird: Dazu muss diese Variable ein 'E' enthalten, z.B.
variables_order = "EGPC"
Wenn das 'E' am Anfang steht, dann kann man die Daten zur Ausführungs-Zeit durch Übergabe von GET- oder POST-Argumenten ändern. Das kann am eigenen Webserver praktisch sein, ist jedoch für das Internet ein untragbares Risiko.
Hier wird eine Auswahl von Umgebungs-Daten demonstriert, falls vom Webserver angeboten.
Wenn das Programm eine ganze Dezimalzahl erkennt, wird sie mit Prefix 0x auch als Hex-Zahl aangezeigt.
Wenn Daten als → UNIX Timestamp erkannt werden, dann werden sie auch im → ISO 8601 Format angezeigt..
Die gleichen Daten sind alternativ mit der → PHP-Funktion getenv verfügbar - Allerdings braucht man dazu die Namen der jeweiligen Variablen ! Eine schön formatierte, aber ungeordnete Liste der Umgebungs-Daten liefert die → PHP-Funktion phpinfo(INFO_ENVIRONMENT)
In der aktuellen Konfiguration dieses Servers ist das Array $_ENV mit Umgebungs-Daten besetzt. Das Beispiel zeigt, wie man Angaben dazu erhält. Live-Daten zum Array $_ENV
isset($GLOBALS['_ENV']) = 1
isset($_ENV) = 1
count($_ENV) = 32
Wenn ihre PHP-Programme $_ENV verwenden, dann sollten sie entsprechend abgesichert werden.
Das Beispiel zeigt eine Möglichkeit dazu mit der in allen Systemen verfügbaren Umgebungs-Variablen PATH
Unsicher:
$p = $_ENV['PATH'];
Besser
if(isset($_ENV['PATH'])) {$p=$_ENV['PATH'];}
else {$p=getenv('PATH');}
Linux unterscheidet streng zwischen großen und kleinen Buchstaben. Die wichtige und daher oft verwendete Umgebungs-Variable HTTP_PROXY kann z.B. in jeder dieser Formen vorkommen:
$_ENV['HTTP_PROXY']
$_ENV['HTTP_proxy']
$_ENV['http_proxy']
Auch eine Mischung von großen und kleinen Buchstaben im Namen (Schlüssel, key) ist selten, aber möglich. Im schlimmsten Fall sind gleichzeitig mehrere Array-Elemente mit unterschiedlichen Namens-Varianten für den gleichen Zweck definiert.
Sichern sie ihre PHP-Programme entsprechend ab, am besten durch Verwendung von → Regulären Ausdrücken.

Just In Time (JIT)

Die Variable auto_globals_jit der PHP → Konfiguration bestimmt, ob das Array $_ENV immer (Off) oder nur bei Bedarf (On) erzeugt wird. Mindestens eine Verwendung in einer Datei genügt zur Erzeugung.
Das genügt für die Erzeugung von $_ENV
if(isset($_ENV)) {...}
Wenn ein Mini-Programm jedoch nur die Liste aller $GLOBALS ausgibt, dann ist darin bei JIT kein Element ['_ENV'] enthalten.

Das Array   $_SERVER

Hier sind die wichtigsten Umgebungs-Daten enthalten. Die elementaren Informationen sind immer enthalten, darüber hinaus bietet jedes Betriebssystem zusätzliche Daten.
Hinweise:
$_SERVER['HTTP_REFERER'] bezeichnet die aufrufende Webseite.
$_SERVER['PHP_SELF'] bezeichnet den Pfad des aktuellen Scripts relativ zur document root des Webservers.
$_SERVER['QUERY_STRING'] enthält die vom aufrufenden Programm übergebene Parameter-Liste.
$_SERVER['REMOTE_ADDR'] enthält die IP-Adresse des Clients (ihr PC).

$_SERVER['REQUEST_METHOD'] enthält die verwendete → CGI-Methode (GET oder POST).
$_SERVER['argc'] enthält die Anzahl der vom aufrufenden Programm übergebenen Parameter (für → Konsolen-Programme)
$_SERVER['argv'] ist ein Array und enthält alle vom aufrufenden Programm übergebenen Argumente in der Form Name=Wert (für Konsolen-Programme).

Just In Time (JIT)

Die Variable auto_globals_jit der PHP→ Konfiguration bestimmt, ob Array $_SERVER immer (Off) oder nur bei Bedarf (On) erzeugt wird. Mindestens eine Verwendung in einer Datei genügt zur Erzeugung.
Das genügt für die Erzeugung von $_SERVER
if(isset($_SERVER)) {. . . }
Wenn ein Mini-Programm jedoch nur die Liste aller $GLOBALS ausgibt, dann ist darin bei JIT kein Element ['_SERVER'] enthalten.

Liste der global definierten Konstanten (PHP & Module)

PHP-Funktion get_defined_constants liefert ein Array mit den Namen und Werten aller aktuell definierten Konstanten.
Das betrifft sowohl vordefinierte Konstanten, als auch eigene (PHP-Funktion define ).
Details zu PHP-Modulen
Viele Module definieren ihre eigenen Konstanten, deren Name üblicherweise mit einem Modul-spezifischen String beginnt, z.B. CAL_ für das Modul calendar, M_ für das Mathematik-Modul (im Standard-Modul enthalten, enthält häufig verwendete Konstanten wie z.B. M_PI).

Das Array   $_COOKIE

In diesem Array sind die von PHP bei ihrem Browser gesetzten Cookies enthalten. Cookies anderer Programme oder Server werden von PHP weder verwendet noch angezeigt. Da eine → PHP-Session verwendet wird, finden sie hier normalerweise ein Cookie, welches sie während ihres Besuches in diesm Web eindeutig ausweist.
Das Misstrauen gegenüber Cookies ist weit verbreitet, jedoch unbegründet. Genau umgekehrt können Cookies bei guter Programmierung dazu verwendet werden, die Sicherheit gegen das Eindringen von Hackern in den Webserver zu verhindern.

Das Array   $_FILES

Dieses Array enthält nur dann Daten, wenn Dateien von (ihrem) Client-PC auf den Server geladen wurden (upload). Da an diese Seite keine Dateien übergeben wurden, erfolgt keine Live-Ausgabe.
Details zum Upload von Dateien mit PHP

Das Array   $_GET

Dieses Array enthält nur dann Daten, wenn ein PHP-Script mit Hilfe der CGI-GET-Methode aufgerufen wurde.
Da an diese Seite keine GET-Daten übergeben wurden, erfolgt keine Live-Ausgabe.
Anzahl und Art der enthaltenen Daten wird durch das aufrufende Programm bestimmt.
Details zur Übergabe von Argumenten (Parametern).

Das Array   $_POST

Dieses Array enthält nur dann Daten, wenn ein PHP-Script mit Hilfe der CGI-POST-Methode aufgerufen wurde.
Da an diese Seite keine POST-Daten übergeben wurden, erfolgt keine Live-Ausgabe.
Anzahl und Art der enthaltenen Daten wird durch das aufrufende Programm bestimmt.
Details zur Übergabe von Argumenten (Parametern).

Das Array   $_REQUEST

Dieses Array ist eine Kombination der Arrays $_COOKIE, $_FILES, $_GET, $_POST. Es kann vorteilhaft benutzt werden, um z.B. die → CGI-Argumente (Parameter) unabhängig von der Methode (GET, POST) in einem einzigen Array zu verarbeiten.

Das Array   $_SESSION

Normalerweise endet die Lebensdauer von PHP-Variablen mit dem Ende des Script-Programms (= der *.php-Datei).
PHP bietet darüber hinaus → Session-Variable, welche ihren Wert bis zum Ende einer Client-Session behalten, d.h. solange, bis der Gast (Client) das jeweilige Web verlässt.
Details zu Session-Variablen.

PHP-Konfiguration

Allgemeines zur PHP-Konfiguration
PHP wird durch die Datei php.ini konfiguriert. Typische Pfade (Linux, Windows):
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini
C:\Windows\php.ini
Je nach Installation kann man die Konfiguration für die Verwendung von PHP mit einem → Webserver (Apache) oder als → Konsolen-Programm (CLI) getrennt angeben.
So kann man den Pfad zur Konfigurations-Datei Live ausgeben:
get_cfg_var('cfg_file_path') = /etc/php5/apache2/php.ini

Öffnen sie diese Datei mit einem Text-Editor: Darin finden sie die Namen und die aktuellen Werte der Konfigurations-Variablen. Zum Studium verwenden sie eine Kopie (!) der Original-Datei.
Die Text-Datei php.ini ist im Internet, in der PHP-Doku und in der Datei selbst gut beschrieben.
Jede Änderung sollte in der Datei selbst mit Angabe des Original-Werts dokumentiert werden.
Wenn PHP als Apache-Modul läuft, dann werden die Änderungen erst nach Neustart des Webservers wirksam, ansonsten bei Ausfährung des nächsten PHP Programms.

Zugang zu den Konfigurations-Variablen

Live Ausgabe von PHP Konfigurations-Variablen mit Funktion get_cfg_var, z.B.
get_cfg_var('max_execution_time') = 30

Jede PHP-Datei erhält eine private Kopie der Konfigurations-Variablen. Nur manche Variablen dieser Kopie können Live geändert werden. (Original-Doku | Funktion ini_set )

In jedem Fall endet die Gültigkeit einer Live Änderung der PHP-Konfiguration beim Verlassen einer PHP-Datei (Webseite).

Lesen und Ändern der privaten Kopie

$n = "max_execution_time";
ini_get($n) = 30
Die private Kopie mancher (!) Variabler kann Live geändert werden, dabei wird ihr vorheriger Wert zurückgegeben:
$old = ini_set($n,33);
ini_get($n) = 33
So wird die Variable wieder zurückgesetzt:
ini_set($n,$old);
ini_get($n) = 30
In jedem Fall endet die Gültigkeit einer Live Änderung der PHP-Konfiguration beim Verlassen einer PHP-Datei (Webseite).

register_globals

Wenn diese veraltete und gefährliche PHP Konfigurations-Variable eingeschaltet ist, dann werden aus allen Variablen der → URI-Adresszeile automatisch (!) PHP-Variable erzeugt, z.B.
http://www.myweb.com/ziel.php?nixgutt=abc
erzeugt oder überschreibt ungefragt eine PHP-Variable
$nixgutt = "abc";
Da sich die Adresszeile leicht manipulieren lässt, kommt das Einschalten dieser Option eine Einladung an Hacker gleich.

Live-Daten (Webserver):
get_cfg_var('register_globals') =
Empfohlene Einstellung für eigene Server:
register_globals = Off

Details zum Senden und Empfangen von Daten (Argumenten, Parametern) mit PHP.

register_long_arrays

Diese PHP Konfigurations-Variable steuert die Erzeugung der Arrays mit alten (langen) Namen, z.B. HTTP_GET_VARS statt $_GET (siehe nächstes Kapitel).
Das macht PHP langsamer ist bei vielen Providern nicht gesetzt (Off).
Wenn alte PHP-Programme damit Probleme haben, dann sollten besser die darin verwendeten alten Array-Namen geändert werden.

Live-Daten (Webserver):
get_cfg_var('register_long_arrays') =
Empfohlene Einstellung für eigene Server:
register_long_arrays = Off

register_argc_argv

Diese Variable steuert die Erzeugung der Variablen argc und argv im globalen Array $_GET
Normalerweise werden diese Variablen nur in → Konsolen-(CLI)-Programmen verwendet. Für die Erzeugung dynamischer Webseiten kann die Variable daher abgeschaltet werden:

Live-Daten (Webserver):
get_cfg_var('register_argc_argv') =1
Empfohlene Einstellung für eigene Server:
register_argc_argv = Off

auto_globals_jit

Diese Variable steuert die Erzeugung der Arrays $_ENV und $_SERVER
Sie werden 'Just in Time' erzeugt, d.h. nur dann, wenn sie in einem Script (PHP-Datei) auch verwendet werden. In diesem Fall werden die Arrays bereits am Beginn des Programms, d.h. vor Ausführung des Codes erzeugt.
Einschalten der Variablen beschleunigt PHP.

Live-Daten (Webserver):
get_cfg_var('auto_globals_jit') =1
Empfohlene Einstellung für eigene Server:
auto_globals_jit = On

Entwicklung   -   Zugriff auf Globale Arrays

Viele wichtige Daten, meist Informationen über die Umgebung, sind in vordefinierten globalen Arrays verfügbar.
Setzen sie an Stelle von $GLOB (gibt es nicht !) einen der unten angeführten Array-Namen ein, z.B. $_ENV
Das Beispiel rechts zeigt, wie sich die Daten ausgeben lassen:
Zuerst für ein einzelnes Element mit bekanntem key (hier 'Name'), danach für alle Elemente des Arrays.
$ga = $GLOB;
$gac = count($ga);
print "Anzahl Elemente = $gac";
// einzelnes Element 'Name'
$v = $ga['Name'];
print "\$GLOB['Name']=$v";
// alle Elemente, sortiert nach keys
ksort($ga);
foreach($ga as $n=>$v) {
print "\$GLOB['$n'] = $v<br />\n";
}
Die Arrays enthalten (je nach Version und Betriebssystem) unterschiedlich viele Elemente. Für eine übersichtliche Anzeige werden die Daten in eingebetteten Fenstern mit Rollbalken angezeigt.
Rechts der HTML-Code eines derartigen <iframe>-Fensters.
<iframe src="demo.php" width="100%" height="100">
</iframe>
Details zum Thema HTML-Einbettung.
Die Namen der vordefinierten globalen Arrays wurden im Verlauf der PHP-Versionen geändert. In der linken Spalte die alten Namen, rechts die neuen. Beide Arrays enthalten die gleichen Daten. Die 'neuen' Arrays sind darüber hinaus superglobals (siehe unten). Verwenden sie in neuen Entwicklungen nur die neuen Array-Namen !
Ersetzen sie die langen Array-Namen in alten PHP-Programmen, damit diese in der PHP-Konfiguration (siehe unten) abgeschaltet werden können.
Ab PHP Version>=6 werden die alten Namen nicht mehr unterstützt !
VeraltetAktuell ab Version 
$HTTP_COOKIE_VARS $_COOKIE 4.1
$HTTP_ENV_VARS $_ENV 4.1
$HTTP_GET_VARS $_GET 4.1
$HTTP_POST_FILES $_FILES 4.1
$HTTP_POST_VARS $_POST 4.1
  $_REQUEST 4.1
$HTTP_SESSION_VARS $_SESSION 4.1
$HTTP_SERVER_VARS $_SERVER 4.1
  $GLOBALS 3

(Eigene) Globale Variable:

Damit globale Variable in einem Script (z.B. function demo) zur Verfügung stehen, müssen sie mit der global-Anweisung von PHP definiert werden.
Hier werden die beiden Variablen $test und $lokal deklariert. In der Funktion demo() wird eine der beiden Variablen mit der global-Anweisung importiert. Die Funktion demo kann die Variable $test lesen und schreiben.
Die Variable $dlok ist auf die Funktion demo beschränkt und außerhalb nicht verfügbar.
Verwendung von eigenen globalen Variablen in PHP
$test = 123;
$lokal = 234;
function demo() {
global $test;
$dlok = 'abc';
$dlok = $test;
$test = 'xyz';
}

Superglobale (Auto-globale) Variable:

Alle in der Spalte 'Aktuell' angegebenen Arrays ($_COOKIE ... $GLOBALS) sind ohne jede weitere Deklaration in allen Scripts global verfügbar.
Verwendung vor-definierter globaler Variablen in PHP:
function demo() {
$x = $_SERVER['REMOTE_ADDR'];
}

Superglobale (Auto-globale) Konstanten:

Viele → PHP-Module definieren eigene ↑ Konstanten. Im Standard-Modul sind u.a. viele häufig verwendete mathematische Konstanten definiert, z.B. die Kreiszahl π
M_PI = 3.14159265...
Verwendung vor-definierter globaler Konstanten in PHP.
function kreisflaeche($r) {
$f = $r * $r * M_PI;
return $f;
}
Letzte Änderung dieser Seite: 2011-12-01 09:25:02