7. Unterrichtsblock

Globale PHP-Variablen – Superglobals

Einige vordefinierte Variablen in PHP sind „superglobals“, was bedeutet, dass sie immer zugänglich sind, unabhängig vom Gültigkeitsbereich – und man kann von jeder Funktion, Klasse oder Datei aus darauf zugreifen, ohne etwas Besonderes tun zu müssen.

Die superglobalen PHP-Variablen sind:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

Die nächsten Kapitel werden einige der Superglobalen erklären, und der Rest wird in späteren Kapiteln erklärt.

PHP $GLOBALS

$GLOBALS ist eine superglobale PHP-Variable, die verwendet wird, um von überall im PHP-Skript (auch aus Funktionen oder Methoden) auf globale Variablen zuzugreifen.

PHP speichert alle globalen Variablen in einem Array namens $GLOBALS[index]. Der Index enthält den Namen der Variablen.

Das folgende Beispiel zeigt, wie die superglobale Variable $GLOBALS verwendet wird:

<?php
$x = 75;
$y = 25;
 
function addition() {
  $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
 
addition();
echo $z;
?>

Da im obigen Beispiel z eine Variable ist, die innerhalb des $GLOBALS-Arrays vorhanden ist, ist sie auch von außerhalb der Funktion zugänglich!

Aufgabe

Baue o.g. Code nach

PHP $_SERVER

$_SERVER ist eine superglobale PHP-Variable, die Informationen über Header, Pfade und Skriptspeicherorte enthält.

Das folgende Beispiel zeigt, wie einige der Elemente in $_SERVER verwendet werden:

<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>

Die folgende Tabelle listet die wichtigsten Elemente auf, die in $_SERVER hineinpassen können:

ElementBeschreibung
$_SERVER['PHP_SELF']Gibt den Dateinamen des aktuell ausgeführten Skripts zurück
$_SERVER['GATEWAY_INTERFACE']Gibt die Version des Common Gateway Interface (CGI) zurück, das der Server verwendet
$_SERVER['SERVER_ADDR']Gibt die IP-Adresse des Hostservers zurück
$_SERVER['SERVER_NAME']Gibt den Namen des Hostservers zurück (z. B. www.webentwicklerkurs.de)
$_SERVER['SERVER_SOFTWARE']Gibt die Serveridentifikationszeichenfolge zurück (z. B. Apache/2.2.24)
$_SERVER['SERVER_PROTOCOL']Gibt den Namen und die Revision des Informationsprotokolls zurück (z. B. HTTP/1.1)
$_SERVER['REQUEST_METHOD']Gibt die für den Zugriff auf die Seite verwendete Anforderungsmethode zurück (z. B. POST)
$_SERVER['REQUEST_TIME']Gibt den Zeitstempel des Beginns der Anfrage zurück (z. B. 1377687496)
$_SERVER['QUERY_STRING']Gibt den Abfragestring zurück, wenn die Seite über einen Abfragestring aufgerufen wird
$_SERVER['HTTP_ACCEPT']Gibt den Accept-Header der aktuellen Anfrage zurück
$_SERVER['HTTP_ACCEPT_CHARSET']Gibt den Accept_Charset-Header aus der aktuellen Anfrage zurück (z. B. utf-8, ISO-8859-1)
$_SERVER['HTTP_HOST']Gibt den Host-Header aus der aktuellen Anfrage zurück
$_SERVER['HTTP_REFERER']Gibt die vollständige URL der aktuellen Seite zurück (nicht zuverlässig, da nicht alle User-Agents dies unterstützen)
$_SERVER['HTTPS']Wird das Skript über ein sicheres HTTP-Protokoll abgefragt
$_SERVER['REMOTE_ADDR']Gibt die IP-Adresse zurück, von der aus der Benutzer die aktuelle Seite betrachtet
$_SERVER['REMOTE_HOST']Gibt den Hostnamen zurück, von dem aus der Benutzer die aktuelle Seite anzeigt
$_SERVER['REMOTE_PORT']Gibt den Port zurück, der auf dem Computer des Benutzers verwendet wird, um mit dem Webserver zu kommunizieren
$_SERVER['SCRIPT_FILENAME']Gibt den absoluten Pfadnamen des aktuell ausgeführten Skripts zurück
$_SERVER['SERVER_ADMIN']Gibt den Wert zurück, der der Anweisung SERVER_ADMIN in der Konfigurationsdatei des Webservers zugewiesen wurde (wenn Ihr Skript auf einem virtuellen Host ausgeführt wird, ist es der für diesen virtuellen Host definierte Wert) (z. B. jemand@webentwicklerkurs.de)
$_SERVER['SERVER_PORT']Gibt den Port auf dem Servercomputer zurück, der vom Webserver für die Kommunikation verwendet wird (z. B. 80)
$_SERVER['SERVER_SIGNATURE']Gibt die Serverversion und den Namen des virtuellen Hosts zurück, die servergenerierten Seiten hinzugefügt werden
$_SERVER['PATH_TRANSLATED']Gibt den dateisystembasierten Pfad zum aktuellen Skript zurück
$_SERVER['SCRIPT_NAME']Gibt den Pfad des aktuellen Skripts zurück
$_SERVER['SCRIPT_URI']Gibt den URI der aktuellen Seite zurück

Aufgabe

Probiere o.g. Variablen aus

PHP $_REQUEST

PHP $_REQUEST ist eine superglobale PHP-Variable, die zum Sammeln von Daten nach dem Absenden eines HTML-Formulars verwendet wird.

Das folgende Beispiel zeigt ein Formular mit einem Eingabefeld und einer Schaltfläche zum Senden.

  1. Wenn ein Benutzer die Daten absendet, indem er auf „Senden“ klickt, werden die Formulardaten an die Datei gesendet, die im Aktionsattribut des <form>-Tags angegeben ist.
  2. In diesem Beispiel verweisen wir mit der Variable $_SERVER['PHP_SELF'] auf diese Datei selbst, um Formulardaten zu verarbeiten.
    • Wenn man eine andere PHP-Datei zur Verarbeitung von Formulardaten verwenden möchte, ersetzt man diese durch den Dateinamen seiner Wahl. Dann kann man die superglobale Variable $_REQUEST verwenden, um den Wert des Eingabefelds zu sammeln:
<html>
<body>

  <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
    Name: <input type="text" name="fname">
    <input type="submit">
  </form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // Verwende den Wert des Eingabefeldes
  $name = $_REQUEST['fname']; 
  if (empty($name)) {
    echo "Name ist leer";
  } else {
    echo $name;
  }
}
?>

</body>
</html>

Aufgabe

Baue o.g. Code nach

PHP $_POST und $_GET

PHP $_POST

PHP $_POST ist eine superglobale PHP-Variable, die verwendet wird, um Formulardaten zu sammeln, nachdem ein HTML-Formular mit method=“post“ gesendet wurde. $_POST wird auch häufig zum Übergeben von Variablen verwendet.

Das folgende Beispiel zeigt ein Formular mit einem Eingabefeld und einer Schaltfläche zum Senden. Wenn ein Benutzer die Daten absendet, indem er auf „Senden“ klickt, werden die Formulardaten an die Datei gesendet, die im Aktionsattribut des <form>-Tags angegeben ist. In diesem Beispiel verweisen wir auf die Datei selbst, um Formulardaten zu verarbeiten. Wenn man eine andere PHP-Datei zur Verarbeitung von Formulardaten verwenden möchte, ersetzen man diese durch einen beliebigen Dateinamen. Dann können man die superglobale Variable $_POST verwenden, um den Wert des Eingabefelds zu sammeln:

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="fname">
<input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  // Verwende den Wert des Eingabefeldes
  $name = $_POST['fname'];  // $_POST statt $_REQUEST
  if (empty($name)) {
    echo "Name ist leer";
  } else {
    echo $name;
  }
}
?>

</body>
</html>

Aufgabe

Baue o.g. Code nach

PHP $_GET

PHP $_GET ist eine superglobale PHP-Variable, die verwendet wird, um Formulardaten zu sammeln, nachdem ein HTML-Formular mit method="get" gesendet wurde.

$_GET kann auch Daten sammeln, die in der URL gesendet werden.

Angenommen, wir haben eine HTML-Seite, die einen Hyperlink mit Parametern enthält:

<html>
<body>

<a href="test_get.php?thema=PHP&schule=IFB-Berufsfachschule">Test $GET</a>

</body>
</html> 

Wenn ein Benutzer auf den Link „Test $_GET“ klickt, werden die Parameter „thema“ und „schule“ an „test_get.php“ gesendet, und man kann dann mit $_GET auf deren Werte in „test_get.php“ zugreifen.

Das folgende Beispiel zeigt den Code in „test_get.php“:

<html>
<body>

<?php
  echo "Lerne " . $_GET['thema'] . " an der " . $_GET['schule'];
?>

</body>
</html>

Aufgabe

Baue o.g. Code nach und versuche über die $_SERVER-Variable auf die aktuell verwendete Datei zuzugreifen und dieser Datei die Parameter anzuhängen.

PHP Reguläre Ausdrücke (RegEx)

Was ist ein regulärer Ausdruck?

Ein regulärer Ausdruck ist eine Zeichenfolge, die ein Suchmuster bildet. Wenn man in einem Text nach Daten sucht, kann man dieses Suchmuster verwenden, um zu beschreiben, wonach man sucht.

Ein regulärer Ausdruck kann ein einzelnes Zeichen oder ein komplizierteres Muster sein.

Reguläre Ausdrücke können verwendet werden, um alle Arten von Textsuch- und Textersetzungsoperationen durchzuführen.

Syntax

In PHP sind reguläre Ausdrücke Zeichenfolgen, die aus Trennzeichen, einem Muster und optionalen Modifikatoren bestehen.

$ausdruck = "/webentwicklerkurs/i";

Im obigen Beispiel /ist das Trennzeichen , webentwicklerkurs das Muster , nach dem gesucht wird, und i ein Modifikator , der die Suche unabhängig von Groß- und Kleinschreibung macht.

Das Trennzeichen kann ein beliebiges Zeichen sein, das kein Buchstabe, keine Zahl, kein umgekehrter Schrägstrich oder kein Leerzeichen ist. Das gebräuchlichste Trennzeichen ist der Schrägstrich (/). Wenn aber ein Muster bereits Schrägstriche enthält, ist es praktisch, andere Trennzeichen wie # oder ~ zu wählen.

Reguläre Ausdrucksfunktionen

PHP bietet eine Vielzahl von Funktionen, mit denen Sie reguläre Ausdrücke verwenden können. Die Funktionen preg_match(), preg_match_all()und preg_replace()gehören zu den am häufigsten verwendeten:

FunktionBeschreibung
preg_match()Gibt 1 zurück, wenn das Muster in der Zeichenfolge gefunden wurde, und 0, wenn nicht
preg_match_all()Gibt zurück, wie oft das Muster in der Zeichenfolge gefunden wurde, was auch 0 sein kann
preg_replace()Gibt eine neue Zeichenfolge zurück, in der übereinstimmende Muster durch eine andere Zeichenfolge ersetzt wurden

Verwendung von preg_match()

Die preg_match()Funktion teilt Ihnen mit, ob eine Zeichenfolge Übereinstimmungen mit einem Muster enthält.

Verwendung eines regulären Ausdrucks, um eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung nach „IFB“ in einer Zeichenfolge durchzuführen:

<?php
$str = "PHP Unterricht an der IFB";
$muster = "/ifb/i";
echo preg_match($muster, $str); // Ausgabe 1
?>

Verwendung von preg_match_all()

Die preg_match_all()Funktion teilt Ihnen mit, wie viele Übereinstimmungen für ein Muster in einer Zeichenfolge gefunden wurden.

Verwendung eines regulären Ausdrucks, um die Anzahl der Vorkommen von „ain“ in einer Zeichenfolge ohne Berücksichtigung der Groß-/Kleinschreibung zu zählen:

<?php
$str = "Blaukraut bleibt Blaukraut und BRAUTKLEID bleibt BRAUTKLEID";
$muster = "/au/i";
echo preg_match_all($muster, $str); // Ausgabe 6
?>

Verwendung von preg_replace()

Die preg_replace()Funktion ersetzt alle Übereinstimmungen des Musters in einer Zeichenfolge durch eine andere Zeichenfolge.

Verwendung eines regulären Ausdrucks ohne Berücksichtigung der Groß-/Kleinschreibung, um „nicht“ durch „noch“ in einer Zeichenfolge zu ersetzen:

<?php
$str = "Mit zwei Bier kann man nicht Autofahren!";
$muster = "/nicht/i";
echo preg_replace($pattern, "noch", $str); 
?>

Modifikatoren für reguläre Ausdrücke

Modifikatoren können ändern, wie eine Suche durchgeführt wird.

ModifikatorBeschreibung
iFührt eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durch
mFührt eine mehrzeilige Suche durch (Muster, die nach dem Anfang oder Ende einer Zeichenfolge suchen, stimmen mit dem Anfang oder Ende jeder Zeile überein)
uErmöglicht den korrekten Abgleich von UTF-8-codierten Mustern

Reguläre Ausdrucksmuster

Klammern werden verwendet, um eine Reihe von Zeichen zu finden:

AusdruckBeschreibung
[abc]Suchen Sie ein Zeichen aus den Optionen zwischen den Klammern
[^abc]Finden Sie jedes Zeichen NICHT zwischen den Klammern
[0-9]Suchen Sie ein Zeichen aus dem Bereich von 0 bis 9

Metazeichen

Metazeichen sind Zeichen mit besonderer Bedeutung:

MetazeichenBeschreibung
|Findet eine Übereinstimmung für ein durch | getrenntes Muster wie in: Katze|Hund|Fisch
.Findet nur eine Instanz eines beliebigen Zeichens
^Findet eine Übereinstimmung am Anfang einer Zeichenfolge wie in: ^Hallo
$Findet eine Übereinstimmung am Ende der Zeichenfolge wie in: Welt$
\dFindet eine Ziffer
\sFindet ein Leerzeichen
\bFindet eine Übereinstimmung am Anfang eines Wortes wie diesem: \bWORT oder am Ende eines Wortes wie diesem: WORT\b
\uxxxxSucht das durch die Hexadezimalzahl xxxx angegebene Unicode-Zeichen

Quantifizierer (Quantoren)

Quantifizierer definieren Mengen:

QuantifiziererBeschreibung
n+Entspricht jeder Zeichenfolge, die mindestens ein n enthält
n*Stimmt mit jeder Zeichenfolge überein, die null oder mehr Vorkommen von n enthält
n?Stimmt mit jeder Zeichenfolge überein, die null oder ein Vorkommen von n enthält
n{x}Stimmt mit jeder Zeichenfolge überein, die eine Folge von X n enthält
n{x,y}Stimmt mit jeder Zeichenfolge überein, die eine Folge von X bis Y n enthält
n{x,}Stimmt mit jeder Zeichenfolge überein, die eine Folge von mindestens X n enthält

Hinweis: Wenn man in einen Ausdruck nach einem der Sonderzeichen suchen muss, kann man einen umgekehrten Schrägstrich ( \ ) verwenden, um diese zu maskieren. Um beispielsweise nach einem oder mehreren Fragezeichen zu suchen, kann man den folgenden Ausdruck verwenden: $muster = '/\?+/';

Gruppierung

Man kann Klammern verwenden ( ), um Quantifizierer auf ganze Muster anzuwenden. Sie können auch verwendet werden, um Teile des Musters auszuwählen, die als Übereinstimmung verwendet werden sollen.

Verwendung der Gruppierung, um nach dem Wort „Banane“ zu suchen, indem man nach ba sucht, gefolgt von zwei Vorkommen von na :

<?php
$str = "Apples and bananas.";
$muster = "/ba(na){2}/i";
echo preg_match($muster, $str); // Ausgabe 1
?>

Vollständige RegExp-Referenz

Eine vollständige Referenz ist hier aufgelistet: https://www.regular-expressions.info/php.html oder bei https://www.w3schools.com/php/php_ref_regex.asp

Übungsaufgaben

1. Aufgabe

Baue die Beispielcodes nach