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:
Element | Beschreibung |
---|---|
$_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.
- 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 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:
- 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
<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:
Funktion | Beschreibung |
---|---|
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.
Modifikator | Beschreibung |
---|---|
i | Führt eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durch |
m | Führt eine mehrzeilige Suche durch (Muster, die nach dem Anfang oder Ende einer Zeichenfolge suchen, stimmen mit dem Anfang oder Ende jeder Zeile überein) |
u | Ermöglicht den korrekten Abgleich von UTF-8-codierten Mustern |
Reguläre Ausdrucksmuster
Klammern werden verwendet, um eine Reihe von Zeichen zu finden:
Ausdruck | Beschreibung |
---|---|
[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:
Metazeichen | Beschreibung |
---|---|
| | 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$ |
\d | Findet eine Ziffer |
\s | Findet ein Leerzeichen |
\b | Findet eine Übereinstimmung am Anfang eines Wortes wie diesem: \bWORT oder am Ende eines Wortes wie diesem: WORT\b |
\uxxxx | Sucht das durch die Hexadezimalzahl xxxx angegebene Unicode-Zeichen |
Quantifizierer (Quantoren)
Quantifizierer definieren Mengen:
Quantifizierer | Beschreibung |
---|---|
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