PHP - Universität zu Köln
Transcription
PHP - Universität zu Köln
PHP Universität zu Köln Sprachliche Informationsverarbeitung SS13 Kolloquium Forschungsprobleme der linguistischen Datenverarbeitung Dozent: Prof. Dr. Jürgen Rolshoven Referent: Alexander Pentzlin Übersicht ➢ Was ist PHP? ➢ Webserver ➢ Entwicklung ➢ Einführung ➢ Superglobale Arrays ➢ Formular Übersicht ➢ Dateien ➢ Funktionen ➢ foreach ➢ Fehlermeldungen ➢ Beispiele ➢ MySQL Was ist PHP? ● Die Abkürzung PHP stand ursprünglich für „Personal Homepage Tools“ und wurde mit der Version 3 in „PHP: Hypertext Preprocessor“ umbenannt.serverseitig interpretierte Skriptsprache ● Paradigmen: imperativ, objektorientiert ● Erscheinungsjahr: 1995 Designer: Rasmus Lerdorf ●Entwickler: The PHP Group ●Aktuelle Version: 5.4.14 (April 2013) ●Typisierung: schwach, dynamisch ●Beeinflusst von: Perl, C, C++, Java ●Betriebssystem: plattformunabhängig ●Lizenz: PHP-Lizenz und andere, teilweise proprietär ●Webseite: php.net ● Ein typischer Ablauf mit Request und Response (Anfrage und Antwort) Webserver ● ● ● ● XAMPP: Das X im Namen sagt aus, dass diese Version auf den meisten Betriebssystemen verfügbar ist. Beinhaltet Apache, das Datenbanksystem MySQL, PHP und eine weitere Skriptsprache namens Perl. WAMP: Für Windows: Apache, MySQL und PHP LAMP: Für Linux: Apache, MySQL und PHP MAMP: Für Macintosh: Apache, MySQL und PHP C:\xampp\htdocs In diesen Ordner kommen alle PHP-Skripts. Man kann ihn im Browser unter http://localhost/ bzw. http://127.0.0.1 erreichen Zum Test legt man am besten C:\xampp\htdocs\index.php an und schreibt folgendes hinein: <?php phpinfo(); ?> Entwicklung Personal Home Page Tools (PHP1): 1995, Rasmus Lerdorf, ursprünglich als Ersatz für eine Sammlung von Perl-Skripten gedacht. PHP/FI (PHP 2): Rasmus Lerdorf, Form Interpreter. PHP 3: Andi Gutmans und Zeev Suraski, neuer Namen „PHP: Hypertext Preprocessor“. PHP 4: Zend Technologies Ltd. entwickelte in der Folge die Zend Engine 1. Sicherheit bei Verwendung globaler Variablen verbessert. PHP 5: 2004, Zend Engine II, verbessertes Objektmodell, Erweiterungen bei XML- und DOM-Handhabung. PHP 5.3 (Namespaces, Late Static Bindings, interner Garbage Collector), 5.4 (Traits, Array- und Konstruktor-Dereferenzierung, Kommandozeile) und 5.5 (Generatoren). PHP 6: geplant- Einstellungen, die für die Sicherheit von Skripts teilweise gefährlich sind, entfernt. Dazu zählen register_globals, magic_quotes und safe_mode. Unterstützung verschiedener Unicode-Standards. Einführung Es gibt Kontrollstrukturen wie if und SwitchCase. Außerdem gibt es die Schleifen for, while und do-while. Eine weitere Schleife für den einfachen Umgang mit (assoziativen) Arrays ist die foreach-Schleife.Jede Anweisung wird mit einem Semikolon („;“) abgeschlossen. Da der PHP-Interpreter nur PHP-Code zwischen <?php und ?> bzw. <? und ?> (short_open_tag) interpretiert, kann PHP auch problemlos in HTML-Dokumente eingebunden werden. Superglobale Arrays Superglobale Arrays heißen so, weil sie überall im Skript verfügbar sind. Man kann sie in jeder Methode oder Funktion verwenden. Die wichtigsten Superglobals sind folgende: $_POST: Über $_POST hat man Zugriff auf alles, was mit der POST-Methode an das Skript geschickt wurde. In der Regel kommen diese Daten aus Formularen oder AJAX-Requests. (AJAX = Asynchronous JavaScript and XML) $_GET: $_GET enthält die Parameter, die ein Skript über die URL mitbekommt. z.B. index.php? name=karl&alter=89 In index.php steht jetzt $_GET[„name“] mit dem Inhalt „karl“ und $_GET[„alter“] mit dem Inhalt 89 zur Verfügung. $_COOKIE: Cookies sind Textdateien auf dem Rechner des Benutzers. Sie dienen zum Speichern von Dateien, die zur Identifikation des Benutzers notwendig sind. Häufig werden auch andere Daten darin gespeichert. z.B. welches Design der Benutzer auf einer Website ausgewählt hat. Alle Cookies, die von der Domain, auf der sich das Skript befindet, gesendet wurden, sind in $_COOKIE wieder abrufbar. $_REQUEST: Wenn man nicht weiß, ob Daten von $_POST, $_GET oder $_COOKIE kommen, verwendet man $_REQUEST. In $_REQUEST sind alle Elemente der Post-, Get- und CookieSuperglobals enthalten. Wenn möglich, sollte man $_REQUEST vermeiden, weil Skripts dadurch komplizierter und fehleranfälliger werden. $_SERVER: Hier finden sich sowohl Informationen über den Server (z.B. die Uhrzeit oder die Domain) als auch über den Benutzer und dessen Browser. Unter anderem kann abgefragt werden, welche IP-Adresse der Benutzer verwendet und von wo er kommt (Der sogenannte Referer) $_FILES: Wenn der User Dateien über ein Formular hochlädt, kann man im PHP-Skript über $_FILES damit arbeiten. $_SESSION: $_SESSION ist ein wesentliches Feature von PHP. Mit Sessions ist es möglich, benutzerbezogene Daten über mehrere Skriptaufrufe hinweg zu erhalten. Das häufigste Anwendungsgebiet von Sessions sind Loginsysteme, wo sich ein Benutzer einloggen und unter seinem Nickname bestimmte Aktionen ausführen kann. PHP identifiziert den Benutzer anhand der Session-ID, die meistens über Cookies ($_COOKIE) oder die URL ($_GET) übertragen wird. So weiß das Skript automatisch, welche Daten zum aktuellen Benutzer gehören. Formular Formulare nutzen meistens die Superglobals $_GET und $_POST, manchmal auch $_FILES, wenn Dateien hochgeladen werden. $_GET Übertragung der Daten über die URL $_POST Es können viel größere Datenmengen als mit GET übertragen werden. GET erlaubt meistens nur 255 Byte. Das variiert aber von Browser zu Browser. Beispiel (Inhalt von index.php bzw. index.html) <html> <head><title>Das erste Formular</title></head> <body> <form action=“verarbeitung.php“ method=“get“> Bitte geben Sie Ihren Namen ein: <input type=“text“ name=“textfeld“ /> <input type=“submit“ value=“Abschicken“ /> </form> </body> </html> Beispiel (Inhalt von verarbeitung.php) <?php if(isset($_GET[„textfeld“])) { echo „Hallo, „.$_GET[„textfeld“].“!“; } else { ?>Es wurde kein Name übertragen<?php } ?> Dateien Wie auch in C kann man in PHP Dateien einbinden. Meistens werden Funktionen und Klassen ausgelagert, so dass diese nur bei Bedarf geladen werden. Eine Datei kann man mit folgenden 4 Befehlen laden lassen: ● include(„meine_datei.php“) Include() ist der Standardbefehl zum Laden von weiteren PHP-Dateien. Falls die Datei, die in der Klammer angegeben wird, nicht existiert, wird eine Fehlermeldung ausgegeben, das Skript wird aber nicht abgebrochen. ● require(„meine_datei.php“) Arbeitet gleich wie include(). Der Unterschied ist jedoch das Skript wird abgebrochen, wenn die Datei nicht existiert. Das ist sinnvoll, wenn eine Datei sehr wichtige Funktionen enthält, ohne die die Abarbeitung des Skripts fehlschlagen würde. ● include_once(„meine_datei.php“) ● require_once(„meine_datei.php“) Binden jede Datei nur einmal ein. Das wird oft genutzt, um Funktionen zu inkludieren. Wenn eine Funktion mehrmals deklariert wird, verursacht PHP eine Fehlermeldung. Funktionen Auch in PHP kann man eigene Funktionen definieren. Im Gegensatz zu C++ und C haben diese aber keinen Rückgabewerttyp. Eine Funktion kann alle Datentypen (int, float, array, string, bool, …) zurückgeben. Beispiel (Inhalt von getValue.php) function getValue($type=“integer“) { switch($type) { case „string“: return „ein String“; break; case „integer“: return 10; break; case „float“: return 10.5; break; default: return false; } } (Inhalt von index.php) //getValue.php einbinden require(„getValue.php“); //getValue() ist jetzt verfügbar $zahl = getValue(„integer“); //$zahl enthält jetzt 10 $string = getValue(„string“); //$string enthält jetzt „ein String“ $float = getValue(„float“); //$float enthält jetzt 10.5 $bool = getValue(„undefinierter_fall“); //$bool ist false, weil es „undefinierter_fall“ nicht gibt <?php echo $zahl1 + $zahl2; //addieren echo $zahl1 - $zahl2; //subtrahieren echo $zahl1 * $zahl2; //multiplizieren echo $zahl1 / $zahl2; //teilen/dividiern echo pow($zahl1,$zahl2); //Zahl1 hoch Zahl2 (102) echo sqrt(64); // Wurzel von 64 ?> Logische Operatoren: Bei AND müssen beide Bedingungen erfüllt sein Bei OR muss mindestens eine Bedingung erfüllt sein Bei XOR darf nur eine Bedingungen erfüllt sein foreach In C++ und den meisten anderen Sprachen gibt es nur for-, while-, und do-while-Schleifen. PHP bietet für den Umgang mit (vor allem assoziativen) Arrays die foreach-Schleife an, mit der man über alle Elemente eines Arrays iterieren kann. (Inhalt von foreach.php) <?php //Array initialisieren $person = array(); $person[„name“] = „Peter“; $person[„alter“] = 17; $person[„wohnort“] = „Berlin“; $person[„Beruf“] = „arbeitslos“; //Alle Elemente von $person ausgeben echo „Person enthält folgende Elemente: <br />“; foreach($person as $key => $value) //$key macht den Schlüssel des Elements zugänglich, //$value den Inhalt { echo $key.“: „.$value; echo „<br />“; } ?> Ausgabe Das Skript erzeugt diese Ausgabe: Person enthält folgende Elemente: name: Peter alter: 17 wohnort: Berlin Beruf: arbeitslos Fehlermeldungen Wenn man eine Webanwendung entwickelt, ist es mehr als sinnvoll, das sogenannte error_reporting auf (E_ALL | E_STRICT) zu stellen. ● ● E_ALL heißt, dass alle Fehlermeldungen angezeigt werden. E_STRICT zeigt Verbesserungsvorschläge für das Skript an. Beispiel error_reporting(E_ALL | E_STRICT); echo $test["irgendwas"]; Wenn vorher $test[„irgendwas“] noch nicht mit einem Wert belegt wurde, gibt PHP diese Meldung aus: Notice: Undefined variable: person in C:\xampp\htdocs\fehlermeldungen.php on line 2 Anhand dieser Meldung kann man den Fehler sehr schnell erkennen und beheben. Produktivbetrieb ➢ error_reporting unbedingt auf E_NONE stellen. Damit werden alle Fehlermeldungen deaktiviert. Denn jede Fehlermeldung verrät Informationen über ein Skript, mit denen ein Angreifer möglicherweise unbefugten Zutritt erhält. Beispiel (Inhalt von index.php) <?php $pages = array(“starseite”, “bilder”, “sonstiges”); //(1) $page = $_GET["page"]; //(2) if($page == “” || $page == NULL || ! in_array($page, $pages)) //(3) { $page = “startseite”; } $ordner_mit_inhalten = “inhalte/”; //(4) $include_pfad = $ordner_mit_inhalten. $page.”.php”; //(5) ?> <html> <head> <title>Meine Homepage</title> </head> <body> <!– Header –> <h1>Meine Homepage</h1> <!– Menu –> <a href=”index.php? page=startseite”>Startseite</a> | <a href=”index.php?page=bilder”>Bilder</a> | <a href=”index.php? page=sonstiges”>Sonstiges</a> <hr /> <!– Inhalt –> <?php include($include_pfad); //(6) ?> </body> </html> (1): In diesem Array stehen alle $_GET[„page“]Parameter, die erlaubt sind. (2): $_GET[„page“] wird $page zugewiesen (3): Wenn $page leer ist oder nicht in $pages steht, wird automatisch die Startseite angezeigt (4): $ordner_mit_inhalten speichert den Pfad zu den Skripts mit den Inhalten (5): Hier wird der Pfad zusammengebaut. (6): Schließlich wird noch der Inhalt eingebunden MySQL ● http://localhost/phpmyadmin ● Benutzer, Datenbanken, Tabellen anlegen ● Verbindungsaufbau: <?php $verbindung = mysql_connect("servername", "euerBenutzername","euerPasswort"); ?> ● Datenbank: <?php $verbindung = mysql_connect ("Servername", "Username", "Passwort") or die ("keine Verbindung möglich. Benutzername oder Passwort sind falsch"); mysql_select_db("Datenbankenname") or die ("Die Datenbank existiert nicht."); ?> ● Abfrage: <?php $abfrage = "SELECT * FROM links"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { echo "$row->name, $row->url, $row>urlname <br>"; } ?> Vielen Dank für Eure Aufmerksamkeit! Quellen: http://de.wikipedia.org/wiki/PHP http://php.net/ http://www.php-einfach.de/ http://www.net-developers.de