Web-Seminar Serverseitige Technologien PHP - 31.01.06 Gikas Stelios <[email protected]> Einleitung Serverseitige Technologien PHP Installation Variablen, Typen HTTP GET/POST Sessions, Cookies Klassen, Objekte MySQL Serverseitige Technologien Was sind Serverseitige Technologien Werden auf dem Server installiert Werden von Webserver ausgewertet Client sieht gar nichts davon Serverseitige Technologien Was sind Serverseitige Technologien Vorteile Clientseitige Ressourcen werden nicht verbraucht Keine Plugins im Browser nötig Code wird nicht offen gelegt Verhältnismäßig wenig Aufwand für dynamische Seiten Nachteile Server Ressourcen werden verbraucht Versionsunterschiede Welche gibt es PHP, Java Servlets, JAVA Server Pages, Active Server Pages, Apache/Tomcat PHP Code Examples <?php $name = "Lisa"; $date = date ("d-m-Y", time()); ?> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World</h1> <p>It's <?php echo $date; ?> and all is well. </p> <?php echo "<p>Hello ".$name.".</p>\n"; ?> </body> </html> Perl Coding Example #!/usr/local/bin/perl print "Content-type: text/html \n\n"; $date = `/usr/local/bin/date`; $name = "Lisa"; print "<html>"; print "<head>"; print "<title>Hello World</title>" print "</head>\n<body>"; print "<h1>Hello World</h1>"; print "<p>It\'s $date and all is well</p>"; print "<p>Hello $name</p>"; print "</body></html>"; JSP Coding Example <%@ page language="java" contentType="text/html" %> <%! String name = "Lisa" %> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World</h1> <p>It's <%= new java.util.Date().toString() %> and all is well. </p> <p> Hello <%= name %>.</p> </body> <html> PHP - Einführung Was ist PHP (aktuell Version 5.1.1) PHP …steht für „Hypertext Preprocessor“ …ist eine Serverseitige Technologie zur Erstellung von dynamischen Erstellung von Webseiten …wird in HTML eingebettet …Syntax ist ähnlich wie die von C/C++ …ist leicht erlernbar …ist sehr leicht an Datenbank anzubinden …ist umsonst …stellt über 1200 Funktionen für verschiedene Anwendungen PHP - Einführung PHP – Preprocessor Preprocessor konvertiert den Eingabetext und gibt das Ergebnis aus. Webseiten werden eingelesen und unverändert ausgegeben. Enthält eine Seite PHP-Markierungszeichen werden sie erstmal vom PHP Programm interpretiert PHP verarbeitet die Webseite und gibt, an Stelle des Programms, den Programmtext aus. PHP - Einführung PHP – Preprocessor Mit PHP Version 4 kam auch ZEND Kommerzielle Code-Engine für optimierten sicheren Produktionsbetrieb ZEND stellt Zend Engine für PHP kostenlos zur Verfügung ZEND stellt aber auch andere kommerziele Produkte zur Verfügung ZEND IDE – Developer Package das einem die Arbeit erleichtern soll SOS-Support Services PHP - Einführung PHP – Preprocessor Es gibt momentan nur ZEND als preprocessor JVM Sun kaffee …. Eigentlich ein Nachteil von PHP PHP - Einführung (1) Browser ruft die Website vom Webserver auf. (2) Der Webserver ruft die Zend Engine auf, welche auf die Disk zugreift (3) Von der Webserver Disk wird der PHP Code geholt und wird an den Runtime Compiler geschickt PHP - Einführung (4) Der Runtime Compiler generiert eine compilierte Representation vom Script und schickt diese an den Executor (5) Der Executor generiert HTML. Aufrufe von anderen Modulen (SQL, XML, …), werden an die PHP module weitergeleitet, verarbeitet und auch ans Web Server Interface geschickt (6) Welches dann am Ende alles an den Browser schickt PHP - Installation Linux (General) Downloaden Auspacken . ./configure --with-mysql --with-apache=../apache_2.x --prefix=/wwwroot Make Make install PHP - Installation Linux (Debian) Über apt-get install am einfachsten Config Files einrichten Windows Am besten PHP Triad holen und installieren PHP Triad besteht aus Apache Webserver MySQL for Windows PHP for Windows PHP - Konfiguration /etc/php4/apache2/php.ini (Auszug) register_globals <input name="formVariable"> PHP code when register_globals = On $myNewVariable = $formVariable; PHP code when register_globals = Off $myNewVariable = $_POST['formVariable']; upload_tmp_dir Wo sollen die Temporäre Dateien gespeichert werden PHP - Konfiguration /etc/php4/apache2/php.ini display_errors and display_startup_errors Diese zwei Einstellungen kontrollieren ob Fehlermeldungen am Browser ausgegeben werden sollen oder ob er leise sein soll log_errors and error_log Diese Einstellungen kontrollieren ob errors in eine log-Datei geschrieben werden sollen. PHP - Konfiguration /etc/php4/apache2/php.ini max_execution_time = 30 max_input_time = 60 Maximum execution time of each script, in seconds Maximum amount of time each script may spend parsing request data memory_limit = 8M Maximum amount of memory a script may consume (8MB) PHP - Einbindung Wie schaut eine php Codebaustein aus. <script language=“php“> </script> <?php ?> <? ?> <% %> <?=„bla bla“ ?> PHP - Funktionsweise HTML: <html><body> <p>Heute ist der 31.01.2006</p> </body></html> PHP: <html><body> <?php print "Heute ist der ".date("d.m.y"); ?> </body></html> PHP – Echo Funktion echo "Hello World!!!"; Ausgabe : Hello World!!! echo ‘Hello World!!!’; Ausgabe : Hello World!!! echo “<p align=“center”> Hello World!!! </p>“; Ausgabe : Fehler !!! Lösung durch Escape Charakter \ oder echo ‘<p align=“center”> Hello World!!! </p>’; Ausgabe : Hello World!!! PHP – Print Funktion print (‘Hello World!!!’); Ausgabe : Hello World!!! Unterschiede zu echo Echo() ist keine Funktion sondern ein Sprachkonstrukt Print hingegen verhält sich wie eine Funktion und liefert auch einen Wert. (Ausdr) ? Anw : Anw; If .. Then .. Else (bekannt aus C++) ($eine_variable) ? echo('true'): echo('false'); //ungültig ($eine_variable) ? print('true'): print('false'); //gültig echo $eine_variable ? 'true': 'false'; // gültig PHP – Variablen, Typen Werden mit $ registriert Aber keine Zahl am Anfang Datentyp wird automatisch erkannt Strings $var = “Du“; // gültig $Var = “Ich“; // gültig $_bla = “dsad“ // gültig $4bla = “dsad“ // ungültig da Zahl vorne Integer $a = 1234; Ausgabe mittels echo echo “$var und $Var $a“; Nicht aber echo ‘$var und $Var $a‘; Ausgabe : Du und Ich 1234 PHP – Variablen, Typen Arrays $foo = array('bar' => 'foo' web' => ‚sem '); echo "Hallo {$foo['bar']}!"; // Hallo foo! echo "Hallo {$foo['web']}!"; // Hallo sem! Konstanten define(‘bla‘,‘WebSem‘); Echo bla; Ausgabe : WebSem PHP – Funktionen function foo($i) { return $i*2; } /* Weise den $a und $b beiden den Wert 5 zu */ $b = $a = 5; /* Weise $c den doppelten Wert von $a */ $c = verdoppeln($a); PHP - Kontrollstrukturen If – then – else; For-Next Schleife; Switch – case Anweisung; Do { Anweisung } while ($i>0); foreach (array_expression as $key => $value) {Anweisung}; Verzweigung If – then – else <?php if($passwort==„geheim“) { print „Passwort g&uuml;ltig“; //weitere Anweisungen }else { print „Passwort ung&uuml;ltig“; //weitere Anweisungen } ?> Die For-Next-Schleife <?php for($y=1; $y<=30; $y++) { print $y; } ?> Verzweigung mit switch <?php switch(Ausdruck) { case ergebnis1: //Anweisungen, wenn Ausdruck=ergebnis1 break; ... default: //Anweisungen, in allen anderen Fällen ?> PHP – Include, require Mittels include und require können wir andere Dateien in der Datei einbinden Die include() Anweisung bindet die Datei ein und wertet diese aus. Die require() genauso Unterschiede Umgang mit Fehlern Require bricht ab im Gegensatz zu include Include macht weiter und gibt eine Fehlermeldung aus PHP – HTTP GET/POST HTTP GET und POST Variablen unter PHP Formular wie gewohnt erstellen <form method="get" action="32_Formular_ausw.php" name="websemget"> Unter action die php Datei angeben die die Variablen auswerten soll. Unter PHP gibt es 3 Arrays die erzeugt werden $_GET $_POST $_COOKIE PHP – HTTP GET/POST Über diese Array kann man die Variablen auslesen. Falls register_globals aktiviert ist, auch direkt über den Variablennamen $varname Ansonsten nur $_GET[‘varname‘] PHP – HTTP GET/POST Vorsicht ist aber geboten, da mann Variablen überschreiben kann. Dafür gibt es gpc_order (PHP3) (gpc) variables_order (PHP4) (EGPCS) Standardmäßig auf egpcs ENVIRONMENT GET POST COOKIE SERVER Damit wird definiert, falls es zwei Variablen mit dem gleichen Namen gibt, welche bevorzugt werden soll PHP – FILE UPLOADS File upload in PHP Die Formaction gibt den temporären Dateinamen aus und die Dateigröße des Uploads (Darf die Größe die in der PHP.INI unter upload_max_filesize festgelegt ist, nicht überschreiten. default-Wert liegt bei 2MB). Diese Datei ist so erstaunlich temporär, dass es sie nach dem Ende des Script schon gar nicht mehr gibt: also schnell umkopieren PHP – FILE UPLOADS <form enctype="multipart/form-data„ method="post„ action="35_Formular_file.php"> <input name="myfile" type="file" ><br> <input type="submit" value="Send File"> </form> PHP – FILE UPLOADS Variablen die zusätzlich gesetzt werden Name : $_FILES['myfile']['name'] Mime Typ : $_FILES['myfile']['type'] Grösse : $_FILES['myfile']['size'] Temporärerer Name : $_FILES['myfile']['tmp_name'] Ebenfalls Name : $myfile_name Mime Typ : $myfile_type Grösse : $myfile_size PHP - Cookies Wie schicke ich Cookies und lese Sie aus. Cookies müssen vor irgendwelchen anderen Headern gesendet werden. Funktion setcookie() Name : Name Value : Wert Expire : Ablauf vom Cookie path, domain, secure Bsp.: setcookie ("TestCookie", "bla", time()+3600); Alles außer Name optional PHP - Cookies Cookies auslesen Funktioniert über die Variablen $HTTP_COOKIE_VARS["TestCookie"] $TestCookie Cookies löschen Neusetzen des Cookies mit einer Zeit in der Vergangenheit damit der Browser zufrieden ist. PHP - Sessions PHP ist sehr vergesslich was Formvariablen angeht Diese sind nur in der nächsten Site gültig Lösung mittels hidden input zu umständlich Einfachere Lösung mittels Sessions Nach Registrierung der Variablen sind diese solange gültig bis die Session beendet wird. Erkennung der Session mittels einer SID PHP - Sessions Starten einer Sessios mittels session_start() Eindeutige SID wird generiert SID ist eine Konstante Oder setzen mittels session_id(“sessname“) Übergabe der SID mittels Cookies Im link einbauen Registrieren der Variablen mittels $_SESSION[‘varname‘] = Wert PHP - Sessions Auslesen der Variablen mittels $_SESSION[‘varname‘] Deregistrieren von Variablen unset($_SESSION[‘varname‘]) SID in Formularen <input type="hidden" name="PHPSESSID" value="<?=session_id()?>"> Session beenden mittels Session_unset() $_SESSION=array() Geschichte von OOP in PHP PHP/FI (Form Interpreter): Entspricht PHP1 und PHP2, welche keine objektorientierten Sprachmerkmale enthielten. PHP 3: erster Versuch, objektorientierte Programmierung in PHP zu ermöglichen. PHP 4, Zend Engine 1: Verbesserte Unterstützung für objektorientierte Programmierung, aber stark limitiertes Objektmodell. PHP 5, Zend Engine 2: Java-ähnliches, von Grund auf überarbeitetes Objektmodell. PHP - Klassen Der Sinn von Objektorientierung ist es nicht, schnelle Programme zu erstellen, sondern deren Entwicklung zu beschleunigen und vor allem deren Erweiterbarkeit zu gewährleisten Klassen haben : Haben Ihre eigene Variablen Eigene Funktionen Man kann beliebig viele neue Objekte erstellen Sehr effizient mit Sessions PHP - Klassen PHP 3, PHP 4: Objekte und Klassen waren zwar implementiert, aber nicht so wie man es von OOP gewohnt ist. Mit PHP4 kam erst die richtige OOP Variablen nur static Kostruktoren und Vererbung waren implementiert PHP 5: Mit PHP5 bricht ein neues Zeitalter für PHP ein. Zentrale Bestandteile der OOP halten Einzug in PHP Variablen als stativ, private, protected deklarieren Destruktoren gibt es auch Abstrakte Klassen und Interfaces Exceptions model (try catch) Rückwärtskompatibilität ??? Jaein. PHP Beispiel : einfaches Objekt <?php <?php class class MeineKlasse MeineKlasse {{ public public $eigenschaft $eigenschaft == "" "; "; function function methode() methode() {{ echo echo "Ich "Ich bin bin ein ein Objekt!<br>"; Objekt!<br>"; }} }} $objekt $objekt == new new MeineKlasse; MeineKlasse; $objekt->methode(); $objekt->methode(); $objekt->eigenschaft $objekt->eigenschaft == Schwarz; Schwarz; echo $objekt->eigenschaft; echo $objekt->eigenschaft; ?> ?> Die Ausgabe sieht wie folgt aus: Ich bin ein Objekt! Schwarz PHP - MySQL PHP hat eingebaute Funktionen um Verbindungen zu MySQL Server herzustellen. Mittels PHP baut man eine (persistente) Verbindung zu MySQL auf. $link = @mysql_pconnect(hostname,UN,PW) Fehlernummer und Fehlertext abfrage mittels mysql_errno // Liefert die Fehlernummer einer zuvor ausgeführten Operation mysql_error // Liefert den Fehlertext der zuvor ausgeführten MySQL Operation Danach muss man die Datenbank auswählen mysql_select_db(dbname,$link) PHP - MySQL Nachdem die Datenbank ausgewählt wurde, führt man die Abfrage aus. $result = mysql_query(query, $link) $result ist ein Zeiger auf den ersten Eintrag Danach muss man iterativ alle Zeilen einzeln auslesen und evtl. ausgeben while ($row = mysql_fetch_row($result)){ … } $row[0]…$row[anzFelder] Nachdem man fertig ist, führt man mysql_free_result($result) // Ergebnis freigeben mysql_close($link) // Datenbank schließen PHP - MySQL Ebenfalls gibt es folgende Befehle mysql_affected_rows // Liefert die Anzahl betroffener Datensätze einer vorhergehenden MySQL Operation mysql_create_db // Erzeugt eine Datenbank mysql_db_query // Absetzen einer Anfrage an die Datenbank mysql_insert_id // Liefert die Kennung einer vorherigen INSERT-Operation mysql_num_rows // Liefert die Anzahl der Datensätze im Ergebnis mysql_pconnect // Öffnete eine persistente Verbindung zum MySQL Server PHP – ERT Projekt Soviel zum Thema PHP Jetzt will ich noch ein Projekt vorstellen ERT (Basisidee von osCommerce) Mehrsprachig MySQL benutzung Klassen User Login PHP - Fragen Fragen zum Vortrag??? Vielen Dank für Ihre Aufmerksamkeit Quellen http://www.php.net http://de.wikipedia.org/wiki/Webdesign http://de.wikipedia.org/wiki/PHP http://www.php-faq.de/q/q-php-was.html http://wp.netscape.com/newsref/std/cookie_s pec.html http://www.usegroup.de/software/phptutorial/i ndex.html http://www.zend.com