PHP: Klasse für einfachen Zugriff auf HTTP-Informationen

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!

Hinweis:
Dies ist ein älterer Artikel von meinem alten Blog. Die Kommentare zu diesem Artikel werden (falls vorhanden) später noch hinzugefügt.

Der Autor

Unter dem Namen »TheBlackPhantom« alias »BlackY« veröffentlichte ich auf meinem alten Blog, BlackPhantom.DE, in der Zeit von 2011 bis 2015 leidenschaftlich Beiträge über Computer, Internet, Sicherheit und Malware. Während der BlackPhantom-Zeit war ich noch grün hinter den Ohren und lernte viel dazu. Mehr Infos vielleicht in Zukunft...