Anzeige
Tutorialbeschreibung

PHP - Teil 06 - Verschiedene Variablentypen

PHP - Teil 06 - Verschiedene Variablentypen

Früher oder später wird euch im Zusammenhang mit den Variablen eine Syntax begegnen, bei der mehrere Dollarzeichen hintereinander stehen. Diese Syntax steht für die sogenannten variablen Variablen, die es ermöglichen, über den in einer Variable gespeicherten Namen auf eine externe Variable mit eben jenem Namen zuzugreifen.


Hier zunächst die allgemeine Syntax:

$var='inhalt_der_variablen_';
$der_name_von_var='var';
echo $$name_von_var; //Hierüber wird der Inhalt von var ausgegeben.

Durch die doppelten Dollarzeichen wird dem PHP-Interpreter mitgeteilt, dass der Zugriff auf die Variable über den in der Variable enthaltenen Namen erfolgen soll. Die Auswertung des Variablennamens erfolgt hier immer nach dem Schema, dass von innen nach außen bzw. von rechts nach links versucht wird, mehrere Namen aufzulösen.
<?php
$vname = 'variable';
$variable = 500;
echo $$vname
?>

Analog zu den variablen Variablennamen gibt es auch variable Funktionsnamen. Ein typisches Beispiel dafür ist die in PHP standardmäßig vordefinierte Funktion strlen(), mit der sich die Länge von Zeichenketten ermitteln lässt.

 
Diese könnte man nun – bezogen auf das vorherige Beispiel – folgendermaßen einsetzen:
<?php
$vname = 'Hallo, Welt!';
$variable = 'strlen';
echo $variable($vname);
?>

Das Skript liefert den Wert 12.

Bilder


Dieser Wert ist korrekt, schließlich besitzt die übergebene Zeichenkette eine Länge von eben jenen 12 Zeichen.


 

Vordefinierte Variablen

PHP hält eine ganze Menge vordefinierter Variablen bereit. Entscheidend ist hier zunächst einmal, dass ihr eure Variablen – wenn diese denn einen anderen Zweck erfüllen sollen – nicht genau so nennt, wie die vordefinierten Variablen heißen. Da es in PHP mittlerweile recht viele dieser vordefinierten Variablen gibt, folgt an dieser Stelle nur ein Blick auf die wichtigsten. Im Laufe eurer Arbeit an und mit PHP werdet ihr es mit denen aber immer mal wieder zu tun bekommen.

Am bekanntesten sind zweifellos die sogenannten "Superglobals" bzw. die "superglobalen Variablen". Bei diesen vordefinierten Variablen handelt es sich um solche, die in allen Gültigkeitsbereichen eines Skripts verfügbar sind. Will man auf diese zugreifen, muss man daher nicht die bereits vorgestellte Syntaxvariante verwenden.
global $variable;

Insgesamt stehen die folgenden Superglobals zur Verfügung:
  • $_GET -  Hierbei handelt es sich um ein assoziatives Array, in dem sämtliche dem aktuellen Skript mit der Get-Methode übergebenen Variablen enthalten sind.
  • $_POST – Auch das ist ein assoziatives Array mit Variablen. Allerdings wurden diese dem Skript mit der Post-Methode übergeben.
  • $_ENV – Das ist ein assoziatives Array von Variablen, die dem aktuellen Skript über die Environment-Methode übergeben werden. Die dabei zur Verfügung stehenden Werte variieren von System zu System. Verwendet die Shell, um euch eine Liste der verfügbaren Umgebungsvariablen anzeigen zu lassen.
  • $_SERVER – Auch hierbei handelt es sich um ein assoziatives Array, in dem verschiedenste Informationen enthalten sind. Zu diesen Informationen gehören u.a. der Serverport, die Remote-Adresse und der verwendete HTTP-Authentifizierungsmechanismus. In diesem Tutorial wird der Einsatz von $_SERVER noch anhand eines Beispiels gezeigt.
  • $_COOKIE – Dieses assoziative Array enthält sämtliche Variablen, die dem aktuellen Skript mittels HTTP-Cookies übergeben wurden.
  • $_REQUEST – Dieses assoziative Array enthält standardmäßig den Inhalt von $_GET, $_POST und $_COOKIE.
  • $_FILES – Ein assoziatives Array aus Variablen, in dem Informationen über Dateien enthalten sind, die mittels der HTTP-Post-Methode übergeben wurden.
  • $_SESSION – In diesem assoziativen Array sind die Sessionvariablen enthalten. Beachtet, dass es sich bei $_SESSION und $HTTP_SESSION_VARS um zwei verschiedene Dinge handelt. $HTTP_SESSION_VARS ist keine superglobale Variable.


 
Die vorgestellten vordefinierten Variablen unterscheiden sich je nach eingesetzter PHP-Version.

Bis PHP 4.1.0 Ab PHP 4.1.0
$HTTP_GET_VARS $_GET
$HTTP_COOKIE_VARS $_COOCKIE
$HTTP_SERVER_VARS $_SERVER
$HTTP_POST_VARS $_POST


Überprüft daher unbedingt im Vorfeld, welche PHP-Version auf dem Server läuft. Am einfachsten geht das über die bereits vorgestellte Funktion phpinfo().

Bilder



Diese Funktion liefert u.a. auch die auf dem Server laufende PHP-Version.

Die vorgestellten superglobalen Variablen dürfen innerhalb von Funktionen und Methoden nicht als variable Variablen verwendet werden.

 
Die Superglobals sind standardmäßig verfügbar. Es gibt allerdings einige PHP-Einstellungen, die auf deren tatsächliche Verfügbarkeit Einfluss haben. Entscheidend ist dabei der bei der php.ini-Einstellung variables_order festgelegte Wert.

Bilder



Denn über variables_order wird die Reihenfolge der Umgebungsvariablen Get, Post, Cookie und Server bestimmt. Wird variables_order auf SP gesetzt, wird PHP die Superglobals $_SERVER und $_POST, nicht aber $_ENV, $_GET und $_COOKIE anlegen. Wird der Wert hingegen auf "" gesetzt, werden keine Superglobals erzeugt.

Die superglobale Variable $_SERVER wurde bereits vorgestellt. Anhand dieser Variablen soll nun gezeigt werden, wie einfach sich die Superglobals verwenden lassen. Die Syntax sieht folgendermaßen aus:
<?php
 function ermittleVariablen($variable) { 
 if (isset($_SERVER)) 
 return (isset($_SERVER[$variable])) ? $_SERVER[$variable] : NULL; 
 else 

 return (isset($HTTP_SERVER_VARS[$variable])) ? $HTTP_SERVER_VARS[$variable] : NULL; 
 } 
 $variables = array( 

 'REMOTE_ADDR'  => 'IP des Clients', 
 'REMOTE_METHOD' => 'Art der Anfrage', 
 'HTTP_USER_AGENT' => 'Browserkennung', 
 'HTTP_ACCEPT_LANGUAGE' => 'Bevorzugte Sprache'
 );
 foreach ($variables as $variable => $desc) 
 printf("$%s, %sn%snn <br />", $variable, $desc, ermittleVariablen($variable)); 
?> 

Hier werden einige Informationen ausgelesen, die in der Variablen $_SERVER enthalten sein können. Die ermittelten Werte werden anschließend ausgegeben.

Bilder


Beachtet, dass in $_SERVER noch deutlich mehr Informationen enthalten sein können. Ausführliche Informationen dazu findet ihr auf der Seite http://www.php.net/manual/de/reserved.variables.server.php.


 

Dateien mit PHP hochladen

Eingangs dieses Tutorials ist bereits die Möglichkeit angeklungen, die die globalen Variablen hinsichtlich des Uploads von Dateien bieten. Eine solche Anwendung soll dieses Tutorial abschließen. Das hier vorgestellte Skript lädt eine Datei beliebigen Typs auf den Server und benennt diese in neu.txt um. Zunächst das HTML-Formular.
<form
   action="<?php echo $_SERVER['PHP_SELF']; ?>"
   method="post"
   enctype="multipart/form-data">
 <input type="file" name="datei" />
 <input type="submit" value="Hochladen" />
 </form>

Hier wird über $_SERVER['PHP_SELF']; dafür gesorgt, dass dem action-Attribut der Name der aktuellen PHP-Datei zugewiesen wird. Im nächsten Schritt muss das Skript definiert werden.
<?php
   if (isset($_FILES['datei']) and ! $_FILES['datei']['error']) {
     move_uploaded_file($_FILES['datei']['tmp_name'], "neu.txt");
     printf("Die Datei %s wurde hochgeladen und in neu.txt umbenanntn",
       $_FILES['datei']['name']);
     printf("Sie ist %u Bytes groß. Der Dateityp ist %s.n",
       $_FILES['datei']['size'], $_FILES['datei']['type']);
   }
  ?>

Hier kommen ebenfalls verschiedene superglobale Variablen zum Einsatz, die in diesem Tutorial bereits vorgestellt wurden. So werden mittels $_FILES die Eigenschaften der hochzuladenden Dateien ausgelesen. Dieses Beispiel hat gezeigt, wie sich mit einer Kombination aus $_FILES und $_SERVER ein – wenn auch sehr einfaches – Upload-Skript umsetzen lässt.

Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von franzg
  • 14.05.2017 - 15:41

Sehr informatives und gutes Tutorial! Vielen Dank!

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 07.10.2016 - 13:13

Vielen Dank, tolles Video.

Portrait von dmtw2107
  • 16.11.2013 - 09:47

verständlich und toll erklärt danke für das tutorial

x
×
×