Um den Zugriff auf bestimmte HTTP-Informationen, Überprüfungsfunktionen und einzelne Schlüssel des $_SERVER
-Arrays zu erleichtern und übersichtlicher zu machen, habe ich eine kleine statische HTTP
-Klasse geschrieben, die diese Dinge ermöglicht. Die Klasse ersetzt vollständig den Zugriff über $_SERVER
für bestimmte HTTP-Informationen.
Auf die Request-Parameter kann ebenfalls zugegriffen werden, womit $_GET
, $_POST
und $_FILES
wegfallen. Außerdem werden die $_GET
- und $_POST
-Daten automatisch mit trim()
bearbeitet, so dass eine erneute Trimmung vor dem Eintragen in die Datenbank oder der Überprüfung durch strlen
wegfällt.
Die HTTP-Klasse: Methoden- und Parameterinformationen
Zuerst einmal der Aufbau der Klasse und die Methodenstruktur.
Methode | Beschreibung |
---|---|
public static init() |
Initialisiert die internen Klassen-Eigenschaften $GET , $POST und $FILES . |
public static issetGetValues(array $keys) |
Prüft, ob alle GET-Schlüssel aus $array gesetzt sind. |
public static issetPostValues(array $keys) |
Prüft, ob alle POST-Schlüssel aus $array gesetzt sind. |
public static requestMethod([optional] string $method) |
Gibt die Request-Methode zurück oder prüft diese. |
public static responseStatus([optional] int $code) |
Sendet einen HTTP-Statuscode an den Client oder fragt ihn ab. |
public static redirect(string $url, [optional] int $code) |
Sendet einen HTTP-Redirect mit Statuscode an den Client. |
public static requestURI() |
Gibt die relativ aufgerufene URL zurück. |
public static useragent() |
Gibt den Inhalt aus dem HTTP-Headerfeld User-Agent zurück (falls übermittelt). |
public static referer() |
Gibt den Inhalt aus dem HTTP-Headerfeld Referer zurück (falls übermittelt). |
Die Klasse ist komplett statisch, das heißt, dass sie nicht instanziert werden muss und somit auch kein Konstruktor ausgeführt wird. Deshalb ist es ganz wichtig, dass vor dem Zugriff auf eine der drei Eigenschaften $GET
, $POST
oder $FILES
die init
-Methode einmal aufgerufen wird, damit die Klasseneigenschaften, die standardmäßig auf NULL
stehen, mit Inhalt befüllt, oder anders gesagt initialisiert werden.
Die Anfragemethode mit requestMethod
ermitteln oder prüfen
Die Methode requestMethod
gibt die Request-Methode zurück, mit der der Webserver angefragt wurde. Das könnte zum Beispiel GET
, POST
oder HEAD
sein. Wenn man aber einen Parameter übergibt, dann ändert sich das Ganze:
Jetzt prüft die Methode nämlich, ob die Request-Methode gleich dem String ist, der als Parameter übergeben wurde. Das ist zum Beispiel viel übersichtlicher innerhalb einer if
-Abfrage, wenn man prüfen möchte, ob da eventuell ein POST
-Request vorliegt und noch Daten kommen.
Request-Methode ausgeben:
#==================
# Standardverfahren
#==================
echo 'Die Request-Method ist: '.$_SERVER['REQUEST_METHOD'];
#================
# Mit HTTP-Klasse
#================
echo 'Die Request-Method ist: '.HTTP::requestMethod();
Request-Methode überprüfen:
#==================
# Standardverfahren
#==================
if($_SERVER['REQUEST_METHOD'] == 'POST') { /* [...] */ }
#================
# Mit HTTP-Klasse
#================
if(HTTP::requestMethod('POST')) { /* [...] */ }
Die aufgerufene URL mit requestURI
ermitteln
Die Methode requestURI()
ermittelt die vom Webserver angefragte relative URL (ohne vorangestellten Hostnamen).
#==================
# Standardverfahren
#==================
echo 'Die aufgerufene URL ist: '.$_SERVER['REQUEST_URI'];
#================
# Mit HTTP-Klasse
#================
echo 'Die aufgerufene URL ist: '.HTTP::requestURI();
Zugriff auf die $_GET
-, $_POST
- oder $_FILES
-Parameter
Vor dem Zugriff muss die init
-Methode einmal ausgeführt worden sein. Erst dann kann man ganz normal auf die Parameter zugreifen. Das Folgende geht natürlich genau so auch bei einer GET
-Anfrage und einem GET
-Parameter. Dann einfach HTTP::$POST
durch HTTP::$GET
ersetzen, und schon hat man Zugriff auf die GET
-Parameter.
#==================
# Standardverfahren
#==================
if($_SERVER['REQUEST_METHOD'] == 'POST' AND isset($_POST['param'])) {
echo 'Der POST-Parameter ist: '.$_POST['param'];
}
#================
# Mit HTTP-Klasse
#================
if(HTTP::requestMethod('POST') AND isset(HTTP::$POST['param'])) {
echo 'Der POST-Parameter ist: '.HTTP::$POST['param'];
}
Pro-Tipp: Mit $_FILES
geht das natürlich genauso. 😎
HTTP-Statuscodes oder Weiterleitungen senden
Mit den Methoden responseStatus
und redirect
kann man Statuscodes an den Client senden und Weiterleitungen setzen. An die Methode responseStatus
muss einfach nur ein Parameter vom Typ int
mit dem entsprechenden HTTP-Statuscode übergeben werden. Andernfalls gibt die Methode den aktuellen HTTP-Statuscode der Anfrage zurück.
Wenn man den Benutzer weiterleiten möchte, dann nutzt man die redirect
-Methode und übergibt als ersten Parameter die Ziel-URL und optional als zweiten Parameter einen Statuscode für die Weiterleitung. Standardmäßig wird der Statuscode 303 See Other
gesendet, der in der Regel ausreicht.
#=========================================================================
# HTTP-Statuscode 503 Service Temporarily Unavailable an den Client senden
#=========================================================================
HTTP::sendstatus(503);
#================================================================
# HTTP-Weiterleitung mit und ohne Statuscode an den Client senden
#================================================================
HTTP::redirect('http://menzerath.eu/'); # Standard: 303-Redirect
HTTP::redirect('http://blackphantom.de/', 301); # 301-Redirect
Prüfen, ob diverse GET
- oder POST
-Parameter gesetzt sind
Mit den beiden Methoden issetGetValues
und issetPostValues
kann man jeweils überprüfen, ob bestimmte GET
- oder POST
-Parameter gesetzt sind. Dazu erwarten die beiden Methoden als ersten und einzigen Parameter ein Array mit den Schlüsselnamen, die gesetzt sein müssen. Danach durchläuft eine foreach
-Schleife das Array. Wenn alle Parameter gesetzt sind, wird TRUE
zurückgegeben, ansonsten FALSE
.
#==========================================================
# Prüfen, ob bestimmte GET- und POST-Parameter gesetzt sind
#==========================================================
if(HTTP::issetGetValues (['param1', 'param2', 'param3', 'param4'])) { /* ... */ }
if(HTTP::issetPostValues(['param1', 'param2', 'param3', 'param4'])) { /* ... */ }
Abschließende Informationen
Die restlichen Methoden sollten selbsterklärend sein. Wer nicht alle Methoden gebrauchen kann, der kann die entsprechenden Methoden natürlich gerne aus der Klasse verbannen.
Hier ist noch das Git-Repository mit der Klasse. Dieses beinhaltet auch immer die aktuellste Version!