| 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
Je nach Installation kann man die Konfiguration für die Verwendung von PHP
mit einem
→ Webserver (Apache) oder als
→ Konsolen-Programm
(CLI) getrennt angeben./etc/php5/cli/php.ini C:\Windows\php.ini 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";
Die private Kopie mancher (!) Variabler kann Live geändert werden,
dabei wird ihr vorheriger Wert zurückgegeben:
ini_get($n) = 30
$old = ini_set($n,33);
So wird die Variable wieder zurückgesetzt:
ini_get($n) = 33
ini_set($n,$old);
In jedem Fall endet die Gültigkeit einer Live Änderung der
PHP-Konfiguration beim Verlassen einer PHP-Datei (Webseite).
ini_get($n) = 30 |
register_globalsWenn 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_arraysDiese 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_argvDiese Variable steuert die Erzeugung der Variablen argc und argv im globalen Array $_GETNormalerweise 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_jitDiese Variable steuert die Erzeugung der Arrays $_ENV und $_SERVERSie 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">
♦ Details zum Thema
HTML-Einbettung.
</iframe> |
||||||||||||||||||||||||||||||
| 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). |
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 !
|
||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
(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
|