SlideShare ist ein Scribd-Unternehmen logo
PHP
  Personal Homepage Tools - Hypertext Preprocessor


  Programmieren für das Web

Teil 1 - Grundlagen

Version: 2012-04-17

License: CC BY NC SA

Erstellt von Hans-Joachim Piepereit (hajo_p@live.de)
Konstruktives Feedback hierzu ist gern gesehen
Inhaltsverzeichnis
1 Einführung                                                                                      3
  1.1 Geschichte . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    3
  1.2 Anwendungsbeispiele . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5
  1.3 Funktionsweise . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
  1.4 Installation und Extras    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   10

2 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 . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   23

3 Anhang                                                    24
  3.1 Verweise und Empfehlungen . . . . . . . . . . . . . . 24



                                 2
1 Einführung
1.1 Geschichte
PHP 1, 2
Rasmus Lerdorf

Personal Home Page Tools (1994 - 1997 )

PHP 3, 4
Rasmus Lerdorf, Zeev Suraski, Andi Gutmans

Zend Engine 1 (1999 - 2003 )




                               3
PHP 5
Zend Engine 2 (2004 - 2012 )

5.0   -   2004   -   Objektorientierung
5.1   -   2005   -   PDO (Datenbanken), SPL (Standard Werkzeugkiste)
5.2   -   2006   -   Filter (Validierung und Absicherung)
5.3   -   2009   -   Namensräume, PHAR Archive, Late Static Binding
5.4   -   2012   -   Mini Webserver, Traits, Wegfall alter Stützräder

PHP 6
Das 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
1.2 Anwendungsbeispiele
    Ursprung: In HTML eingebettete Template Sprache
1   <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 . php
2   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
MVC-Web: Zusätzliche Trennung von Logik und Daten in PHP
1    <?php
2    // S t a r t e Logik
3    $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 r
5    $dao = new php_frameworkDAO( ' mysql ' ) ;
6    // Hole Daten ab
7    $data = $dao−        >user− i l t e r B y I d ( 1 ) ;
                                  >f
8    // S e t z e e i n e HTML Datei f u e r das Aussehen
9    $view = new php_frameworkView ( ' t e s t . htm ' ) ;
10   // Erzeuge d i e Ausgabe
11   $ r e s u l t = $view− a r s e ( $data ) ;
                             >p
12   // S e t z e d i e Ausgabe e i n
13   $con−    >setBody ( $ r e s u l t ) ;
14   // Sende Header und Ausgabe
15   $con−    >send ( ) ;

      Die Klassen sind je nach Framework anders benannt / strukturiert.



                                            6
1.3 Funktionsweise
Ablauf bei Standardverwendung
1. Request    Ansurfen von z.B. www.php.net/index.php

2. Webserver Annahme der Anfrage z.B. auf HTTP Port 80

3. PHP        Verarbeitet z.B. /var/www/localhost/index.php

4. Response PHP übergibt Resultat an Webserver zur Antwort

5. 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
Ablauf bei Kommandozeile
1. Kommando Ausführen von z.B. php /dev/php/test.php

2. PHP         Verarbeitet die Datei im besonderen CLI Modus

3. Ausgabe     Resultat folgt direkt aus PHP heraus

Beispiele für Kommandozeilen: Windows CMD, Linux Bash Shell

Beispiele für Verwendung: PHP PEAR, PHP Server, PHP Tools

Details zum Compiler
   On the fly      Single Request      Verbose

Opcode Caching    Shared Memory     Zend Guard




                              8
Bereiche starten und beenden

     *.php    Standard für auszuführende Dateien
     *.phps   Quelltext der Datei mit Syntaxhervorhebung


1    // Standard
2    <?php
3    // 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
1.4 Installation und Extras
Die 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 Performanter

Built-in Development Server
Kommandozeile php -S Adresse:Port
Beispiel: php -S localhost:8080




                              10
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 Windows

PECL
PHP Extension Community Library
Bezug von Erweiterungen (z.B. APC, Imagick, Xdebug)

PEAR
PHP Extension and Application Repository
Bezug von vorgefertigten Klassen (z.B. PEAR DB, PEAR Mail)




                               11
2 Bausteine der Sprache
2.1 Eigenschaften
Herkunft und Einfluss
Imperativ nah bei C und teilweise Perl, Objektorientiert nah bei Java
Stellt viele C Bibliotheken als leicht nutzbare Erweiterungen bereit

Typisierung
Dynamisch und schwach, per SPL bedingt erzwingbar
Typ bei formalen Parametern nur für Arrays und Objekte
Einfache Typen z.B. per settype Anweisung wechselbar

Einordnung
Programmiersprache, Scriptsprache, Imperativ, Objektorientiert



                                 12
2.2 Syntax und Strukturen
    Ausgabe von Text

1   <?php // Zuweisung e i n e s Wertes b e i der V a r i a b l e t e s t
2   $ 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 r
4   echo ' Dies i s t ' . " nur e i n " . $ t e s t ;



    Rechnen

1   <?php
2   $ z a h l = FALSE ;
3   // Addiere 1 hinzu und forme dadurch zum I n t e g e r um
4   $ 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 l
5   // 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 wird
6   echo ' Zahl : ' . ( i n t ) $ z a h l ;




                                           13
Arrays
    Sind in PHP sehr vielfältig einsetzbar (noch mehr mit SPL)

            Map                  List            Stack

       Dictionary           Collection          Queue


1    <?php
2    // 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 e
3    $ c o l o r s = a r r a y ( ' red ' , ' g r e e n ' , ' y e l l o w ' ) ;
4

5    // Mehrere Dimensionen v e r s c h a c h t e l b a r
6    $ t e s t = a r r a y ( a r r a y ( ' t e s t ' => a r r a y ( ) ) ) ;
7

8    // S e i t PHP 5 . 4 : Short a r r a y syntax
9    $ c o l o r s = [ ' red ' , ' g r e e n ' , ' y e l l o w ' ] ;




                                                     14
Man kann sehr dynamisch und flexibel mit Arrays arbeiten


1    <?php
2    $array = array () ;
3

4    // Neue Elemente a n l e g e n
5    $array [ ] = ' eintrag 1 ' ;
6    $array [ ] = ' eintrag 2 ' ;
7

8    // Lese das e r s t e Element aus
9    $one = $ a r r a y [ 0 ] ;
10

11   // S o r t i e r e d i e Elemente im Array nach Keys
12   ksort ( $array ) ;
13

14   // E n t f e r n e e i n Element aus einem Array
15   unset ( $array [ 0 ] ) ;




                                      15
Funktionen

1    <?php
2    // Addiere 1 dazu
3    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 Funktion
5    echo my_inc ( 1 ) ;
6    // Funktion per C a l l b a c k verwenden
7    echo c a l l _ u s e r _ f u n c ( ' my_inc ' , 1) ;
8

9     // 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 Funktion
12    echo $my_inc ( 2 ) ;
13    // Anonyme Funktion per C a l l b a c k verwenden
14    echo c a l l _ u s e r _ f u n c ( $my_inc , 2) ;




                                               16
Verzweigungen

1   <?php // Wenn Dann
2   i f (1 === TRUE) { echo ' 1 i s t genau TRUE' } ;
3   // A l t e r n a t i v e
4   e l s e i f (1 == TRUE) { echo ' 1 i s t sowas wie TRUE' ; }
5   // Sonst
6   e l s e { echo ' 1 i s t n i c h t TRUE' } ;



    Schleifen

1   <?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 . ' ' ; }
3

4    // 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
2.3 Gefahren und Stützräder
Globale Werte und Input-Daten
Typ                Beispiele             Bemerkungen
Globals            $GLOBALS[’var’]       Unsauber und seit 5.4 JIT
Global Import      global $var           Etwaig wie Globals
Superglobals       $_GET[’id’]           Nicht ungefiltert verwenden
Register Globals   $_GET[’id’] als $id   Seit 5.4 entfernt

Strings und Anführungszeichen
Typ            Beispiele                   Bemerkungen
Null Byte      0 oder %00                 Wirkt anders als man denkt
Bearbeitung    substr($var)                Besser iconv_substr($var)
Magic Quotes   $_POST mit addslashes       Seit 5.4 entfernt
Encoding       Byte order mark             Mag PHP nicht leiden




                                18
Weiteres
Typ             Beispiele                Bemerkungen
64 bit builds   amd64                    Noch nicht ausgereift
Threads         Multi-Threading          Siehe Abschnitt Installation
Eval            eval(’php sourcecode’)   Viel Spaß beim absichern
Safe Mode       Künstliche Verbote       Seit 5.4 entfernt

Abhilfen
Typ              Beispiele          Bemerkungen
SQL 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
2.4 Arbeit mit externen Daten
     Superglobals

1    <?php // D e t a i l s zum S e r v e r und dem Anfrage−Z i e l
2    $_SERVER
3    // HTTP GET Daten
4    $_GET
5    // HTTP POST Daten
6    $_POST
7    // M u l t i p a r t Daten
8    $_FILES
9    // Cookies s e t z e n und a b r u f e n
10    s e t c o o k i e ( ' name ' , ' i n h a l t ' ) ;
11   $_COOKIE
12   // S e s s i o n s t a r t e n und verwenden
13    session_start ()
14   $_SESSION




                                        20
Dateisystem

1    <?php
2    // Lese den I n h a l t e i n e r Datei e i n
3    $text = file_get_contents ( ' test . txt ' ) ;
4

5     // S c h r e i b e den I n h a l t i n e i n e andere Datei
6     file_put_contents ( ' test2 . txt ' , $text ) ;
7

8     // Das   Lesen geht z .B. auch per URI
9     $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 verwenden
13     ∗ und   vor e i n e r Ausgabe den I n h a l t a b s i c h e r n
14     ∗/




                                               21
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 Erweiterung
3    i f ( e x t e n s i o n _ l o a d e d ( ' xcache ' ) ) {
4

5        // 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 g
6        xcache_set ( ' key ' , ' t e s t v a l u e ' , 30) ;
7

8        // Lade den E i n t r a g
9        i f ( x c a c h e _ i s s e t ( ' key ' ) ) {
10

11           $ r e s u l t = xcache_get ( ' key ' ) ;
12       }
13   }
14

15    echo ' Cache I n h a l t : ' . $ r e s u l t ;




                                                         22
2.5 Argumentation
Vorteile
- 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 verworfen

Nachteile
- 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
3 Anhang
3.1 Verweise und Empfehlungen
Websites zu den Themen
http://www.php.net/manual             PHP Manual
http://pear.php.net                   PHP PEAR
http://pecl.php.net                   PHP PECL
http://www.hardened-php.net/suhosin   Suhosin Patch
http://httpd.apache.org               Apache Webserver
http://www.apachelounge.com           Apache for Windows
http://xcache.lighttpd.net            XCache Extension

Bücher zu den Themen
Programming PHP O’Reilly    Der Klassiker von Rasmus Lerdorf
PHP 5 Kochbuch O’Reilly     Lösungswege für gängige Aufgaben




                            24

Weitere ähnliche Inhalte

PDF
Web Entwicklung mit PHP - Teil 2
PDF
Perl 5.20: Feature, Kultur, Module, Werkzeuge
PPT
XML-Socket-Server zur Kommunikation mit Flash
PDF
Programmieren mit PROLOG
PDF
An Introduction to Ruby
PDF
PPT
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
PDF
Perl 5 Quiz Chemnitz Edition
Web Entwicklung mit PHP - Teil 2
Perl 5.20: Feature, Kultur, Module, Werkzeuge
XML-Socket-Server zur Kommunikation mit Flash
Programmieren mit PROLOG
An Introduction to Ruby
Perl - die Taschenkettensäge unter den Programmiersprachen - Vortrag 2003
Perl 5 Quiz Chemnitz Edition

Was ist angesagt? (20)

PDF
Von Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
PPT
Interprozesskommunikation mit PHP
PDF
Lösungsorientierte Fehlerbehandlung
PDF
P6oo
PDF
P6kontext2014
PDF
Check cisco voice
PDF
Source Code Analyse - Ein praktikabler Ansatz
PPT
Die freie Programmiersprache Python
PDF
Quellcode Analyse
PPT
Tech Talk: Groovy
PDF
IPC 2015 Zend Framework 3 Reloaded
PDF
Ein Gopher im Netz
PDF
Designpatterns in Ruby
PDF
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
PDF
Php Schulung
PDF
GNU Bourne Again SHell
PDF
GE_: mein perlsProgrammssprache Unterricht Vol.IV
PDF
IPC2017SE - Zend\Expressive Workshop
PPT
Tutorium 4
PDF
Mozilla Audio Data API
Von Automaten zu Programmen–Parsergeneratoren und Attributgrammatiken
Interprozesskommunikation mit PHP
Lösungsorientierte Fehlerbehandlung
P6oo
P6kontext2014
Check cisco voice
Source Code Analyse - Ein praktikabler Ansatz
Die freie Programmiersprache Python
Quellcode Analyse
Tech Talk: Groovy
IPC 2015 Zend Framework 3 Reloaded
Ein Gopher im Netz
Designpatterns in Ruby
Battle of the Languages: Java und Python im Wettstreit beim Lösen von Program...
Php Schulung
GNU Bourne Again SHell
GE_: mein perlsProgrammssprache Unterricht Vol.IV
IPC2017SE - Zend\Expressive Workshop
Tutorium 4
Mozilla Audio Data API
Anzeige

Andere mochten auch (20)

PPT
Sirenita quería cantar
PDF
Valentín
PPTX
Observatorio de Calidad
PPT
Actores que saben lo que hacen
PPT
H O T E L E S L A S V E G A S
PPSX
PPS
Acuarelas
PPT
A eso, llamalo.....
PPTX
la amistad
PPT
Tu angel - El otro yo
PPT
Inteco
PDF
Katalog náhradních dílů Movera, Hykro 2013/2014
PPS
SEGOVIA
ODP
Presentacion de la asoc. fibrocastril
PDF
Enfoquecuantitativoycualitativoenlainvestigacin 120410165102-phpapp01
PPS
Sonata claro de luna
PPS
LA FOTOGRAFÍA
PPS
Firstclass
PDF
Encuesta Discapacidad, AutonomíA Y Dependencia
Sirenita quería cantar
Valentín
Observatorio de Calidad
Actores que saben lo que hacen
H O T E L E S L A S V E G A S
Acuarelas
A eso, llamalo.....
la amistad
Tu angel - El otro yo
Inteco
Katalog náhradních dílů Movera, Hykro 2013/2014
SEGOVIA
Presentacion de la asoc. fibrocastril
Enfoquecuantitativoycualitativoenlainvestigacin 120410165102-phpapp01
Sonata claro de luna
LA FOTOGRAFÍA
Firstclass
Encuesta Discapacidad, AutonomíA Y Dependencia
Anzeige

Ähnlich wie Web Entwicklung mit PHP - Teil 1 (20)

PDF
PHP Sucks?!
PPTX
Object-orientied way of using mysqli interface - Workshop
PPT
Übersicht Skriptsprachen
PDF
382726314 X Php5 In 14 Tagen (Ddt)
PDF
PHP 5.3 - da war doch was?
ODP
ZIP
PHP_Codesniffer
PDF
Web Entwicklung mit PHP - Teil 3 Beta
PDF
Continuous Integration für PHP
ODP
Php Tutorium
PDF
Source-Code-Analyse – ein praktikabler Ansatz
PDF
Besser php entwickeln - Erstentwurf
PDF
Besser php programmieren - Von der Klasse über Unittests, Cruisecontrol, Seli...
PDF
SS13 Sitzung 1
PDF
Webentwicklung mit PHP und MySQL
PPT
PHP auf IBM Plattformen
PDF
Flash cs3, ajax und php
PPTX
SoSe 2013 | IT-Zertifikat: AT II - 00_Organisatorisches
PDF
Programmiertechniken
PDF
Qualitätsmanagement für Web- und PHP Applikationen
PHP Sucks?!
Object-orientied way of using mysqli interface - Workshop
Übersicht Skriptsprachen
382726314 X Php5 In 14 Tagen (Ddt)
PHP 5.3 - da war doch was?
PHP_Codesniffer
Web Entwicklung mit PHP - Teil 3 Beta
Continuous Integration für PHP
Php Tutorium
Source-Code-Analyse – ein praktikabler Ansatz
Besser php entwickeln - Erstentwurf
Besser php programmieren - Von der Klasse über Unittests, Cruisecontrol, Seli...
SS13 Sitzung 1
Webentwicklung mit PHP und MySQL
PHP auf IBM Plattformen
Flash cs3, ajax und php
SoSe 2013 | IT-Zertifikat: AT II - 00_Organisatorisches
Programmiertechniken
Qualitätsmanagement für Web- und PHP Applikationen

Web Entwicklung mit PHP - Teil 1

  • 1. PHP Personal Homepage Tools - Hypertext Preprocessor Programmieren für das Web Teil 1 - Grundlagen Version: 2012-04-17 License: CC BY NC SA Erstellt von Hans-Joachim Piepereit (hajo_p@live.de) Konstruktives Feedback hierzu ist gern gesehen
  • 2. Inhaltsverzeichnis 1 Einführung 3 1.1 Geschichte . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Anwendungsbeispiele . . . . . . . . . . . . . . . . . . 5 1.3 Funktionsweise . . . . . . . . . . . . . . . . . . . . . 7 1.4 Installation und Extras . . . . . . . . . . . . . . . . 10 2 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 . . . . . . . . . . . . . . . . . . . . . 23 3 Anhang 24 3.1 Verweise und Empfehlungen . . . . . . . . . . . . . . 24 2
  • 3. 1 Einführung 1.1 Geschichte PHP 1, 2 Rasmus Lerdorf Personal Home Page Tools (1994 - 1997 ) PHP 3, 4 Rasmus Lerdorf, Zeev Suraski, Andi Gutmans Zend Engine 1 (1999 - 2003 ) 3
  • 4. PHP 5 Zend Engine 2 (2004 - 2012 ) 5.0 - 2004 - Objektorientierung 5.1 - 2005 - PDO (Datenbanken), SPL (Standard Werkzeugkiste) 5.2 - 2006 - Filter (Validierung und Absicherung) 5.3 - 2009 - Namensräume, PHAR Archive, Late Static Binding 5.4 - 2012 - Mini Webserver, Traits, Wegfall alter Stützräder PHP 6 Das 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. 1.2 Anwendungsbeispiele Ursprung: In HTML eingebettete Template Sprache 1 <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 . php 2 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. MVC-Web: Zusätzliche Trennung von Logik und Daten in PHP 1 <?php 2 // S t a r t e Logik 3 $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 r 5 $dao = new php_frameworkDAO( ' mysql ' ) ; 6 // Hole Daten ab 7 $data = $dao− >user− i l t e r B y I d ( 1 ) ; >f 8 // S e t z e e i n e HTML Datei f u e r das Aussehen 9 $view = new php_frameworkView ( ' t e s t . htm ' ) ; 10 // Erzeuge d i e Ausgabe 11 $ r e s u l t = $view− a r s e ( $data ) ; >p 12 // S e t z e d i e Ausgabe e i n 13 $con− >setBody ( $ r e s u l t ) ; 14 // Sende Header und Ausgabe 15 $con− >send ( ) ; Die Klassen sind je nach Framework anders benannt / strukturiert. 6
  • 7. 1.3 Funktionsweise Ablauf bei Standardverwendung 1. Request Ansurfen von z.B. www.php.net/index.php 2. Webserver Annahme der Anfrage z.B. auf HTTP Port 80 3. PHP Verarbeitet z.B. /var/www/localhost/index.php 4. Response PHP übergibt Resultat an Webserver zur Antwort 5. 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. Ablauf bei Kommandozeile 1. Kommando Ausführen von z.B. php /dev/php/test.php 2. PHP Verarbeitet die Datei im besonderen CLI Modus 3. Ausgabe Resultat folgt direkt aus PHP heraus Beispiele für Kommandozeilen: Windows CMD, Linux Bash Shell Beispiele für Verwendung: PHP PEAR, PHP Server, PHP Tools Details zum Compiler On the fly Single Request Verbose Opcode Caching Shared Memory Zend Guard 8
  • 9. Bereiche starten und beenden *.php Standard für auszuführende Dateien *.phps Quelltext der Datei mit Syntaxhervorhebung 1 // Standard 2 <?php 3 // 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. 1.4 Installation und Extras Die 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 Performanter Built-in Development Server Kommandozeile php -S Adresse:Port Beispiel: php -S localhost:8080 10
  • 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 Windows PECL PHP Extension Community Library Bezug von Erweiterungen (z.B. APC, Imagick, Xdebug) PEAR PHP Extension and Application Repository Bezug von vorgefertigten Klassen (z.B. PEAR DB, PEAR Mail) 11
  • 12. 2 Bausteine der Sprache 2.1 Eigenschaften Herkunft und Einfluss Imperativ nah bei C und teilweise Perl, Objektorientiert nah bei Java Stellt viele C Bibliotheken als leicht nutzbare Erweiterungen bereit Typisierung Dynamisch und schwach, per SPL bedingt erzwingbar Typ bei formalen Parametern nur für Arrays und Objekte Einfache Typen z.B. per settype Anweisung wechselbar Einordnung Programmiersprache, Scriptsprache, Imperativ, Objektorientiert 12
  • 13. 2.2 Syntax und Strukturen Ausgabe von Text 1 <?php // Zuweisung e i n e s Wertes b e i der V a r i a b l e t e s t 2 $ 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 r 4 echo ' Dies i s t ' . " nur e i n " . $ t e s t ; Rechnen 1 <?php 2 $ z a h l = FALSE ; 3 // Addiere 1 hinzu und forme dadurch zum I n t e g e r um 4 $ 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 l 5 // 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 wird 6 echo ' Zahl : ' . ( i n t ) $ z a h l ; 13
  • 14. Arrays Sind in PHP sehr vielfältig einsetzbar (noch mehr mit SPL) Map List Stack Dictionary Collection Queue 1 <?php 2 // 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 e 3 $ c o l o r s = a r r a y ( ' red ' , ' g r e e n ' , ' y e l l o w ' ) ; 4 5 // Mehrere Dimensionen v e r s c h a c h t e l b a r 6 $ t e s t = a r r a y ( a r r a y ( ' t e s t ' => a r r a y ( ) ) ) ; 7 8 // S e i t PHP 5 . 4 : Short a r r a y syntax 9 $ c o l o r s = [ ' red ' , ' g r e e n ' , ' y e l l o w ' ] ; 14
  • 15. Man kann sehr dynamisch und flexibel mit Arrays arbeiten 1 <?php 2 $array = array () ; 3 4 // Neue Elemente a n l e g e n 5 $array [ ] = ' eintrag 1 ' ; 6 $array [ ] = ' eintrag 2 ' ; 7 8 // Lese das e r s t e Element aus 9 $one = $ a r r a y [ 0 ] ; 10 11 // S o r t i e r e d i e Elemente im Array nach Keys 12 ksort ( $array ) ; 13 14 // E n t f e r n e e i n Element aus einem Array 15 unset ( $array [ 0 ] ) ; 15
  • 16. Funktionen 1 <?php 2 // Addiere 1 dazu 3 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 Funktion 5 echo my_inc ( 1 ) ; 6 // Funktion per C a l l b a c k verwenden 7 echo c a l l _ u s e r _ f u n c ( ' my_inc ' , 1) ; 8 9 // 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 Funktion 12 echo $my_inc ( 2 ) ; 13 // Anonyme Funktion per C a l l b a c k verwenden 14 echo c a l l _ u s e r _ f u n c ( $my_inc , 2) ; 16
  • 17. Verzweigungen 1 <?php // Wenn Dann 2 i f (1 === TRUE) { echo ' 1 i s t genau TRUE' } ; 3 // A l t e r n a t i v e 4 e l s e i f (1 == TRUE) { echo ' 1 i s t sowas wie TRUE' ; } 5 // Sonst 6 e l s e { echo ' 1 i s t n i c h t TRUE' } ; Schleifen 1 <?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 . ' ' ; } 3 4 // 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. 2.3 Gefahren und Stützräder Globale Werte und Input-Daten Typ Beispiele Bemerkungen Globals $GLOBALS[’var’] Unsauber und seit 5.4 JIT Global Import global $var Etwaig wie Globals Superglobals $_GET[’id’] Nicht ungefiltert verwenden Register Globals $_GET[’id’] als $id Seit 5.4 entfernt Strings und Anführungszeichen Typ Beispiele Bemerkungen Null Byte 0 oder %00 Wirkt anders als man denkt Bearbeitung substr($var) Besser iconv_substr($var) Magic Quotes $_POST mit addslashes Seit 5.4 entfernt Encoding Byte order mark Mag PHP nicht leiden 18
  • 19. Weiteres Typ Beispiele Bemerkungen 64 bit builds amd64 Noch nicht ausgereift Threads Multi-Threading Siehe Abschnitt Installation Eval eval(’php sourcecode’) Viel Spaß beim absichern Safe Mode Künstliche Verbote Seit 5.4 entfernt Abhilfen Typ Beispiele Bemerkungen SQL 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. 2.4 Arbeit mit externen Daten Superglobals 1 <?php // D e t a i l s zum S e r v e r und dem Anfrage−Z i e l 2 $_SERVER 3 // HTTP GET Daten 4 $_GET 5 // HTTP POST Daten 6 $_POST 7 // M u l t i p a r t Daten 8 $_FILES 9 // Cookies s e t z e n und a b r u f e n 10 s e t c o o k i e ( ' name ' , ' i n h a l t ' ) ; 11 $_COOKIE 12 // S e s s i o n s t a r t e n und verwenden 13 session_start () 14 $_SESSION 20
  • 21. Dateisystem 1 <?php 2 // Lese den I n h a l t e i n e r Datei e i n 3 $text = file_get_contents ( ' test . txt ' ) ; 4 5 // S c h r e i b e den I n h a l t i n e i n e andere Datei 6 file_put_contents ( ' test2 . txt ' , $text ) ; 7 8 // Das Lesen geht z .B. auch per URI 9 $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 verwenden 13 ∗ und vor e i n e r Ausgabe den I n h a l t a b s i c h e r n 14 ∗/ 21
  • 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 Erweiterung 3 i f ( e x t e n s i o n _ l o a d e d ( ' xcache ' ) ) { 4 5 // 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 g 6 xcache_set ( ' key ' , ' t e s t v a l u e ' , 30) ; 7 8 // Lade den E i n t r a g 9 i f ( x c a c h e _ i s s e t ( ' key ' ) ) { 10 11 $ r e s u l t = xcache_get ( ' key ' ) ; 12 } 13 } 14 15 echo ' Cache I n h a l t : ' . $ r e s u l t ; 22
  • 23. 2.5 Argumentation Vorteile - 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 verworfen Nachteile - 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. 3 Anhang 3.1 Verweise und Empfehlungen Websites zu den Themen http://www.php.net/manual PHP Manual http://pear.php.net PHP PEAR http://pecl.php.net PHP PECL http://www.hardened-php.net/suhosin Suhosin Patch http://httpd.apache.org Apache Webserver http://www.apachelounge.com Apache for Windows http://xcache.lighttpd.net XCache Extension Bücher zu den Themen Programming PHP O’Reilly Der Klassiker von Rasmus Lerdorf PHP 5 Kochbuch O’Reilly Lösungswege für gängige Aufgaben 24