Übersicht » Einführung OOP
Das Script auf dieser Seite baut auf das unter dem Stichpunkt "Socket Klasse" veröffentlichte
Code-Listing auf. Doch im Unterschied zum vorausgehenden Listing, bei dem der Code für die Überprüfung der vom Formular
übermittelten Daten noch im prozeduralen Stil verfasst wurde, übernimmt in diesem Listing eine eigene Klasse diese
Überprüfung. Sollte das Script nicht die erwarteten Ergebnisse liefern, so beachten Sie bitte die Hinweise unter "Voraussetzungen und Aufruf des Scripts".
Code-Listing/Script:
<?php error_reporting(E_ALL); /*-- Überprüfung der vom Formular übermittelten URL ---------------------------*/ class EmpfangMessage { private $dompath = ""; private $domain = "www.example.com"; private $seite = "/"; public function pruefeMessage() { if (isset($_GET["abrufen"]) and !empty($_GET["abrufen"])) { $abrufen = trim($_GET["abrufen"]); $hrefpos = stripos($abrufen, "http://"); $abrufen = preg_replace("/[^a-zA-Z0-9.:?&\/=_-]/", "", $abrufen); if ($hrefpos === false) { $abrufen = "http://".$abrufen; } $this->dompath = parse_url($abrufen); return $this->dompath; } } public function liefereHost() { if (isset($this->dompath["host"]) and !empty($this->dompath["host"])) { $dhost = $this->dompath["host"]; } else {$dhost = $this->domain; } return $dhost; } public function lieferePfad() { if (isset($this->dompath["path"]) and !empty($this->dompath["path"])) { $pfad = $this->dompath["path"]; if (isset($this->dompath["query"]) and !empty($this->dompath["query"])) { $pfad .= "?".$this->dompath["query"]; } } else {$pfad = $this->seite; } return $pfad; } } /*-- Klasse zum Aufbau einer TCP/IP Socket Verbindung -------------------------*/ class WieBot { public $domain = ""; public $seite = ""; public function getVerbindung() { $request = "GET ".$this->seite." HTTP/1.1\r\n"; $request .= "Host: ".$this->domain."\r\n"; $request .= "User-Agent: Mozilla/5.0 (compatible; Demo Botklasse 0.1)\r\n"; $request .= "Connection: Close\r\n\r\n"; $dienstp = getservbyname("www", "tcp"); $adresse = gethostbyname($this->domain); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $gebeaus = ""; if ($socket != false) { $sockett = "TCP/IP Socket (Endpunkt) wurde erzeugt: OK.<br>\n"; } else { $sockett = "TCP/IP Socket (Endpunkt) wurde nicht erzeugt: Grund: ". socket_strerror($socket)."<br>\n"; } $verbindg = socket_connect($socket, $adresse, $dienstp); if ($verbindg != false) { $verbindgt = "Eine Verbindung zu ".$adresse." ". "über Port ".$dienstp." wurde aufgebaut: OK.<br>\n"; } else { $verbindgt = "Der Verbindungsaufbau schlug fehl. ". "Grund: ".$verbindg." ".socket_strerror($verbindg)."<br>\n"; } $gesendet = socket_write($socket, $request, strlen($request)); if ($gesendet !== false) { $gesendett = "Ein HTTP GET Request wurde gesendet: OK.<br>\n"; } else { $gesendett = "Es wurde kein Request gesendet!<br>\n"; } while ($ausgabe = socket_read($socket, 1000)) { $gebeaus .= htmlentities($ausgabe, ENT_QUOTES); } socket_close($socket); $endeges = "Der Socket (Endpunkt) wurde geschlossen: OK.<br>\n\n"; return "<span style=\"color:#862000\">".$sockett.$verbindgt.$gesendett."</span>\n<hr>\n". "<pre>".$gebeaus."</pre>\n<hr>\n<span style=\"color:#862000\">".$endeges."</span>\n"; } } /*-- Vorbereitungen für die Ausgabe -------------------------------------------*/ $vonform = new EmpfangMessage(); // Erzeugen und Instanziieren des Objektes EmpfangMessage $vonform->pruefeMessage(); // Aufruf der Methode pruefeMessage um die Eigenschaft $dompath zu verändern $fuerhost = $vonform->liefereHost(); // Rückgabewert der Methode liefereHost der Variablen $fuerhost zuweisen $fuerpfad = $vonform->lieferePfad(); // Rückgabewert der Methode lieferePfad der Variablen $fuerpfad zuweisen $vonbot = new WieBot(); // Erzeugen und Instanziieren des Objektes WieBot $vonbot->domain = $fuerhost; // übernommener Wert der Eigenschaft $domain zuweisen $vonbot->seite = $fuerpfad; // übernommener Wert der Eigenschaft $seite zuweisen $ausgabe = $vonbot->getVerbindung(); // Rückgabewert der Methode getVerbindung für Ausgabe strlen($fuerpfad) > 1 ? $fuerform = $fuerpfad : $fuerform = ""; ?> <!DOCTYPE html> <html> <head> <title>Abruf wie durch Bot</title> </head> <body> <div style="text-align:center"> <h1>Abruf wie durch Bot</h1> <?php echo htmlentities($fuerhost.$fuerform, ENT_QUOTES)."<br>\n"; ?> <form action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" method="get"> <input type="text" name="abrufen" size="60" maxlength="120"><br> <input type="reset" value=" Reset "> <input type="submit" value=" Senden "> </form> </div> <?php echo $ausgabe; ?> </body> </html>
Ob OOP in diesem Beispiel der strukturierten Programmierung vorzuziehen, sei als Frage in den Raum
gestellt. Zumindest erweckt der Code auf dieser Seite gegenüber dem Code aus dem vorausgehenden Beispiel einen etwas
aufgeblähten Eindruck, ohne dass sich Vorteile zu erkennen geben würden.
Bei diesbezüglichen Überlegungen sollte jedoch nicht vergessen werden, dass für den Aufbau der Verbindung eine hardwarenahe
Schnittstelle für Socket-Verbindungen genutzt wurde. Einfacher geht es hingegen mit cURL, wobei die Klasse fürs Formular
einfacher ausfällt und für andere, ähnlich gelagerte Anwendungen durchaus verwendbar. Dazu im nächsten Beispiel mehr.
Socket Klasse « / » cURL Klasse
Einstieg in PHP
Übersicht
Diverse Themen