Web Entwicklung mit PHP - Teil 1

1.853 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.853
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
2
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Web Entwicklung mit PHP - Teil 1

  1. 1. PHP Personal Homepage Tools - Hypertext Preprocessor Programmieren für das WebTeil 1 - GrundlagenVersion: 2012-04-17License: CC BY NC SAErstellt von Hans-Joachim Piepereit (hajo_p@live.de)Konstruktives Feedback hierzu ist gern gesehen
  2. 2. Inhaltsverzeichnis1 Einführung 3 1.1 Geschichte . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Anwendungsbeispiele . . . . . . . . . . . . . . . . . . 5 1.3 Funktionsweise . . . . . . . . . . . . . . . . . . . . . 7 1.4 Installation und Extras . . . . . . . . . . . . . . . . 102 Bausteine der Sprache 12 2.1 Eigenschaften . . . . . . . . . . . . . . . . . . . . . . 12 2.2 Syntax und Strukturen . . . . . . . . . . . . . . . . 13 2.3 Gefahren und Stützräder . . . . . . . . . . . . . . . . 18 2.4 Arbeit mit externen Daten . . . . . . . . . . . . . . . 20 2.5 Argumentation . . . . . . . . . . . . . . . . . . . . . 233 Anhang 24 3.1 Verweise und Empfehlungen . . . . . . . . . . . . . . 24 2
  3. 3. 1 Einführung1.1 GeschichtePHP 1, 2Rasmus LerdorfPersonal Home Page Tools (1994 - 1997 )PHP 3, 4Rasmus Lerdorf, Zeev Suraski, Andi GutmansZend Engine 1 (1999 - 2003 ) 3
  4. 4. PHP 5Zend Engine 2 (2004 - 2012 )5.0 - 2004 - Objektorientierung5.1 - 2005 - PDO (Datenbanken), SPL (Standard Werkzeugkiste)5.2 - 2006 - Filter (Validierung und Absicherung)5.3 - 2009 - Namensräume, PHAR Archive, Late Static Binding5.4 - 2012 - Mini Webserver, Traits, Wegfall alter StützräderPHP 6Das Unicode Problem der Zend Engine 3 (ICU bzw. INTL)Aktuell- Versionskontrolle auf GitHub umgezogen- Planungen für PHP 5.5 laufen (RFCs im Wiki) 4
  5. 5. 1.2 Anwendungsbeispiele Ursprung: In HTML eingebettete Template Sprache1 <html><body>2 <?php echo " H a l l o Welt " ; ?>3 </body></html> Entwicklung: Trennung von Struktur (HTML) und Logik (PHP)1 <html><body>2 <?php i n c l u d e news . php ?>3 </body></html>1 <?php // news . php2 echo " Dies i s t e i n e News <br />n " ;3 echo " Dies i s t e i n e w e i t e r e News <br />n " ; 5
  6. 6. MVC-Web: Zusätzliche Trennung von Logik und Daten in PHP1 <?php2 // S t a r t e Logik3 $con = new php_framework F r o n t C o n t r o l l e r ( ) ;4 // Verbinde mit D a t e n s p e i c h e r5 $dao = new php_frameworkDAO( mysql ) ;6 // Hole Daten ab7 $data = $dao− >user− i l t e r B y I d ( 1 ) ; >f8 // S e t z e e i n e HTML Datei f u e r das Aussehen9 $view = new php_frameworkView ( t e s t . htm ) ;10 // Erzeuge d i e Ausgabe11 $ r e s u l t = $view− a r s e ( $data ) ; >p12 // S e t z e d i e Ausgabe e i n13 $con− >setBody ( $ r e s u l t ) ;14 // Sende Header und Ausgabe15 $con− >send ( ) ; Die Klassen sind je nach Framework anders benannt / strukturiert. 6
  7. 7. 1.3 FunktionsweiseAblauf bei Standardverwendung1. Request Ansurfen von z.B. www.php.net/index.php2. Webserver Annahme der Anfrage z.B. auf HTTP Port 803. PHP Verarbeitet z.B. /var/www/localhost/index.php4. Response PHP übergibt Resultat an Webserver zur Antwort5. Ausgabe Browser stellt die Antwort dar (z.B. in HTML) Beachte: HTTP ist zustandslos, Sitzungen in PHP nutzbar Webserver für PHP: Apache, Lighttpd, Microsoft IIS, Nginx, ... 7
  8. 8. Ablauf bei Kommandozeile1. Kommando Ausführen von z.B. php /dev/php/test.php2. PHP Verarbeitet die Datei im besonderen CLI Modus3. Ausgabe Resultat folgt direkt aus PHP herausBeispiele für Kommandozeilen: Windows CMD, Linux Bash ShellBeispiele für Verwendung: PHP PEAR, PHP Server, PHP ToolsDetails zum Compiler On the fly Single Request VerboseOpcode Caching Shared Memory Zend Guard 8
  9. 9. Bereiche starten und beenden *.php Standard für auszuführende Dateien *.phps Quelltext der Datei mit Syntaxhervorhebung1 // Standard2 <?php3 // Short open tag ( Achtung b e i XML)4 <?5 // Short echo syntax ( s e i t 5 . 4 Standard s t a t t Short )6 <?= " H a l l o Welt "7 // C l o s i n g tag (am Dateiende w e g l a s s b a r )8 ?>9 // S c r i p t V a r i a n t e ( v e r a l t e t )10 <s c r i p t language=" php "></s c r i p t > 9
  10. 10. 1.4 Installation und ExtrasDie passende Version bestimmen- VC9 besser und schneller als VC6, NTS besser als TS- Apache MPM Variante mit mod_php effektivste Umgebung Thread Sicherheit Ja (TS) Nein (NTS) Verwendung Multi-Threading Kein Threading Beispiel Apache MPM worker Apache MPM prefork Vorteile Mehr Sicherheit Stabiler und PerformanterBuilt-in Development ServerKommandozeile php -S Adresse:PortBeispiel: php -S localhost:8080 10
  11. 11. Konfiguration- php.ini im PHP Verzeichnis- Webserver (z.B. Apache .htaccess)- PHP Befehle ini_* mit z.B. ini_set Hinweis: extension_dir = "./ext" geht auch unter WindowsPECLPHP Extension Community LibraryBezug von Erweiterungen (z.B. APC, Imagick, Xdebug)PEARPHP Extension and Application RepositoryBezug von vorgefertigten Klassen (z.B. PEAR DB, PEAR Mail) 11
  12. 12. 2 Bausteine der Sprache2.1 EigenschaftenHerkunft und EinflussImperativ nah bei C und teilweise Perl, Objektorientiert nah bei JavaStellt viele C Bibliotheken als leicht nutzbare Erweiterungen bereitTypisierungDynamisch und schwach, per SPL bedingt erzwingbarTyp bei formalen Parametern nur für Arrays und ObjekteEinfache Typen z.B. per settype Anweisung wechselbarEinordnungProgrammiersprache, Scriptsprache, Imperativ, Objektorientiert 12
  13. 13. 2.2 Syntax und Strukturen Ausgabe von Text1 <?php // Zuweisung e i n e s Wertes b e i der V a r i a b l e t e s t2 $ t e s t = Test ;3 // Der Punkt−Operator v e r b i n d e t I n h a l t e m i t e i n a n d e r4 echo Dies i s t . " nur e i n " . $ t e s t ; Rechnen1 <?php2 $ z a h l = FALSE ;3 // Addiere 1 hinzu und forme dadurch zum I n t e g e r um4 $ z a h l += 1 ; # A l t e r n a t i v e n : $ z a h l++ oder ++$ z a h l5 // S t e l l e s i c h e r , d a s s Zahl a l s I n t e g e r verwendet wird6 echo Zahl : . ( i n t ) $ z a h l ; 13
  14. 14. Arrays Sind in PHP sehr vielfältig einsetzbar (noch mehr mit SPL) Map List Stack Dictionary Collection Queue1 <?php2 // S p e i c h e r e mehrere Farben i n e i n e r V a r i a b l e3 $ c o l o r s = a r r a y ( red , g r e e n , y e l l o w ) ;45 // Mehrere Dimensionen v e r s c h a c h t e l b a r6 $ t e s t = a r r a y ( a r r a y ( t e s t => a r r a y ( ) ) ) ;78 // S e i t PHP 5 . 4 : Short a r r a y syntax9 $ c o l o r s = [ red , g r e e n , y e l l o w ] ; 14
  15. 15. Man kann sehr dynamisch und flexibel mit Arrays arbeiten1 <?php2 $array = array () ;34 // Neue Elemente a n l e g e n5 $array [ ] = eintrag 1 ;6 $array [ ] = eintrag 2 ;78 // Lese das e r s t e Element aus9 $one = $ a r r a y [ 0 ] ;1011 // S o r t i e r e d i e Elemente im Array nach Keys12 ksort ( $array ) ;1314 // E n t f e r n e e i n Element aus einem Array15 unset ( $array [ 0 ] ) ; 15
  16. 16. Funktionen1 <?php2 // Addiere 1 dazu3 f u n c t i o n my_inc ( $ i n t ) { r e t u r n ++$ i n t ; }4 // Teste d i e Funktion5 echo my_inc ( 1 ) ;6 // Funktion per C a l l b a c k verwenden7 echo c a l l _ u s e r _ f u n c ( my_inc , 1) ;89 // S e l b i g e s a l s Anonyme Funktion ( C l o s u r e )10 $my_inc = f u n c t i o n ( $ i n t ) { r e t u r n ++$ i n t ; }11 // Teste d i e Funktion12 echo $my_inc ( 2 ) ;13 // Anonyme Funktion per C a l l b a c k verwenden14 echo c a l l _ u s e r _ f u n c ( $my_inc , 2) ; 16
  17. 17. Verzweigungen1 <?php // Wenn Dann2 i f (1 === TRUE) { echo 1 i s t genau TRUE } ;3 // A l t e r n a t i v e4 e l s e i f (1 == TRUE) { echo 1 i s t sowas wie TRUE ; }5 // Sonst6 e l s e { echo 1 i s t n i c h t TRUE } ; Schleifen1 <?php // For−S c h l e i f e ( e t w a i g wie i n C)2 f o r ( $ i = 0 ; $ i < 1 0 ; $ i++) { echo $ i . ; }34 // Foreach−S c h l e i f e ( s e h r g e e i g n e t b e i Arrays )5 f o r e a c h ( $ a r r a y AS $key => $ v a l u e ) { echo ~ ; } 17
  18. 18. 2.3 Gefahren und StützräderGlobale Werte und Input-DatenTyp Beispiele BemerkungenGlobals $GLOBALS[’var’] Unsauber und seit 5.4 JITGlobal Import global $var Etwaig wie GlobalsSuperglobals $_GET[’id’] Nicht ungefiltert verwendenRegister Globals $_GET[’id’] als $id Seit 5.4 entferntStrings und AnführungszeichenTyp Beispiele BemerkungenNull Byte 0 oder %00 Wirkt anders als man denktBearbeitung substr($var) Besser iconv_substr($var)Magic Quotes $_POST mit addslashes Seit 5.4 entferntEncoding Byte order mark Mag PHP nicht leiden 18
  19. 19. WeiteresTyp Beispiele Bemerkungen64 bit builds amd64 Noch nicht ausgereiftThreads Multi-Threading Siehe Abschnitt InstallationEval eval(’php sourcecode’) Viel Spaß beim absichernSafe Mode Künstliche Verbote Seit 5.4 entferntAbhilfenTyp Beispiele BemerkungenSQL Injection Quotes, Union Prepared Statements (PDO)Remote Exec include $file allow_url_include deaktivieren Headers send echo vor header Ausgabepuffer (ob_*)Erweiterung der Sicherheit:PECL taint, Suhosin Patch, open_basedir, display_errors, ... 19
  20. 20. 2.4 Arbeit mit externen Daten Superglobals1 <?php // D e t a i l s zum S e r v e r und dem Anfrage−Z i e l2 $_SERVER3 // HTTP GET Daten4 $_GET5 // HTTP POST Daten6 $_POST7 // M u l t i p a r t Daten8 $_FILES9 // Cookies s e t z e n und a b r u f e n10 s e t c o o k i e ( name , i n h a l t ) ;11 $_COOKIE12 // S e s s i o n s t a r t e n und verwenden13 session_start ()14 $_SESSION 20
  21. 21. Dateisystem1 <?php2 // Lese den I n h a l t e i n e r Datei e i n3 $text = file_get_contents ( test . txt ) ;45 // S c h r e i b e den I n h a l t i n e i n e andere Datei6 file_put_contents ( test2 . txt , $text ) ;78 // Das Lesen geht z .B. auch per URI9 $uri = u r l e n c o d e ( http : / /www. php . net / index . php ) ;10 $text2 = file_get_contents ( $uri ) ;11 /∗12 ∗ Man s o l l t e b e i URIs immer u r l e n c o d e verwenden13 ∗ und vor e i n e r Ausgabe den I n h a l t a b s i c h e r n14 ∗/ 21
  22. 22. User Memory Cache (KeyValueStore)1 <?php $ r e s u l t = ;2 // Check a u f E x i s t e n z der Erweiterung3 i f ( e x t e n s i o n _ l o a d e d ( xcache ) ) {45 // S p e i c h e r e e i n e n E i n t r a g 30 Sekunden l a n g6 xcache_set ( key , t e s t v a l u e , 30) ;78 // Lade den E i n t r a g9 i f ( x c a c h e _ i s s e t ( key ) ) {1011 $ r e s u l t = xcache_get ( key ) ;12 }13 }1415 echo Cache I n h a l t : . $ r e s u l t ; 22
  23. 23. 2.5 ArgumentationVorteile- Sehr gut dokumentiert, einfach zu Lernen, schnelle Resultate- Flexibel verwendbar, Plattformunabhängig, alles Wichtige dabei- Hochgradig skalierbar, leichtes Deployment, Cloud Betrieb möglich- Direkter und vollständiger Support von HTTP und der Server-API- Durchdachte Einteilung von Sichtbarkeitsbereichen der Variablen- Keine laufende Anwendung nötig, wird gestartet und verworfenNachteile- Schnelle Resultate führen zu Fehlern und schlechter Code Qualität- Historisch gewachsen, daher teilweise mehrere Wege für ein Ziel- PHP Erweiterungen untereinander sehr unterschiedlich aufgebaut- Strings werden nur Byte-basiert verwendet (Abhilfen vorhanden)- Fehlende Features treiben Enterprise Frameworks in Workarounds 23
  24. 24. 3 Anhang3.1 Verweise und EmpfehlungenWebsites zu den Themenhttp://www.php.net/manual PHP Manualhttp://pear.php.net PHP PEARhttp://pecl.php.net PHP PECLhttp://www.hardened-php.net/suhosin Suhosin Patchhttp://httpd.apache.org Apache Webserverhttp://www.apachelounge.com Apache for Windowshttp://xcache.lighttpd.net XCache ExtensionBücher zu den ThemenProgramming PHP O’Reilly Der Klassiker von Rasmus LerdorfPHP 5 Kochbuch O’Reilly Lösungswege für gängige Aufgaben 24

×