48
15.12.18 1 Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken Webtechnologien Teil 9: PHP IV - Bibliotheken

Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

15.12.18 1Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Webtechnologien

Teil 9: PHP IV - Bibliotheken

Page 2: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

2Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Übersicht

• Zugriff auf Ordner und Dateien auf dem Server

• Iteratoren

• Streams

• Standard-Funktionen

• Sessions

Page 3: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

3Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Zugriff auf Ordner (Objektorientiert) I

Methode Erläuterung

dir(Pfad) Konstruktor der Klasse

read Auslesen des Ordnereintrags

rewind Zurücksetzen des Ordnerzeigers

close(Handle) Schließen des Handles

• Für den Zugriff auf Ordner ist die Klasse dir vorgesehen.

• Die Objekte der Klasse dir haben zwei Attribute:– handle

– path

und die folgenden Methoden:

Page 4: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

4Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Zugriff auf Ordner (Objektorientiert) II

$d= dir("."); // öffnet Ordner und erstellt Objektwhile($Eintrag= $d->read()) { echo "$Eintrag\n";}$d->close();

$d= dir("."); // öffnet Ordner und erstellt Objektwhile($Eintrag= $d->read()) { if (is_dir($Eintrag)) { echo "Ordner $Eintrag\n"; } else { echo "Datei $Eintrag\n"; }}$d->close();

bool is_dir(string path)liefert true, wenn die Datei path ein Ordner ist

Page 5: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

5Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Zugriff auf Dateien I - Beispiele

string getcwd() liefert den Dateinamen des Arbeitsordners

chdir(string Pfad) wechselt das Arbeitsverzeichnis zu Pfad

copy(string source, string destination)

kopiert eine Datei

rename(string alt, string neu) benennt eine Datei um

unlink(string Pfad) löscht eine Datei

mkdir(string Pfad) legt einen Ordner an

rmdir(string Pfad) löscht einen Ordner

Das sind Bibliotheksroutinen, die nicht-objektorientiert verwendet werden.Die Prozeduren liefern ein True-Wert, wenn es geklappt hat.

Page 6: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

6Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Zugriff auf Dateien II - Beispiele

bool is_dir(string Pfad) true falls Datei ein Ordner ist

bool is_executable(string Pfad) true falls Datei ausführbar ist

bool is_file(string Pfad) true falls Datei eine normale Datei ist

bool is_link(string Pfad) true falls Datei ein Link ist

bool is_readable (string Pfad) true falls Datei lesbar ist

bool is_writable (string Pfad) true falls Datei beschreibbar ist

bool file_exists(string Pfad) true falls Datei existiert

string filetype(string Pfad) Typ der Datei als String

Das sind Bibliotheksroutinen, die nicht-objektorientiert verwendet werden.

• filetype() gibt den Typ der Datei als String zurück,mögliche Werte sind:– "file", "dir", "link" und "unknown" (und noch weitere).

– Siehe http://de.php.net/manual/de/function.filetype.php

Page 7: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

7Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Iteratoren I

• Das obige Beispiel noch einmal in nicht-objektorientierter Form

• Diese Version hat sowohl hier und auch oben einen Fehler:Was passiert, wenn es eine Datei mit dem Namen "0" gibt?

• Hinweis: "0" wird in false konvertiert.

$dir=".";$d= opendir($dir);while($entry= readdir($d)) { echo "$entry\n";}closedir($d);

Page 8: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

8Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Iteratoren II

• Die obige Lösung ist nun korrekt.

• Unten dasselbe mit einem Iterator-Objekt, das die Probleme berücksichtigt.

$d= opendir(".");while(false!==($entry= readdir($d))) { echo "$entry\n";}closedir($d);

foreach (new DirectoryIterator(".") as $entry) { echo "$entry\n";}

Page 9: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

9Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Iteratoren III - Es wird noch schlimmer

• Läuft die obige Version unter Windows? Schauen Sie sich die Trenner zwischen Ordner und Dateinamen an.

• Unten steht die die korrekte Version mit Iterator, vorausgesetzt, dass unter dem angegebenen Ordner die Inhalte vorhanden sind.

$dirname= '/opt/www/'; $dir= opendir($dirname);while(false!==($Entry= readdir($dir))) { if (is_file($dirname.DIRECTORY_SEPARATOR.$Entry)) { echo "File $Entry\n"; } }closedir($dir);

foreach (new DirectoryIterator("/opt/www/") as $Entry) { if (!$Entry->isDir()) { echo "$Entry\n"; }}

Page 10: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

10Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

DirectoryIterator-Methoden

string getPath() Liefert den Pfad ohne Datei

string getFilename() Liefert den Dateinamen

string getPathname() Liefert den Pfad mit Dateinamen

bool isDir() True falls Datei ein Verzeichnis ist

bool isDot() True falls Datei ein Verzeichnis mit den Namen "." oder ".." ist

• Es gibt für viele Anwendungsfälle vorgefertigte Iteratoren.• Neben diesen "Grunditeratoren" gibt es noch Filter, die wie in einer

Kette hintereinander geschaltet werden können.• Es können eigene Iteratoren geschrieben werden.

Page 11: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

11Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Streams

• Stream = Abstrakte Schnittstelle zu Datenquellen

• Streams realisieren eine einheitliche Schnittstelle zu verschiedenen Datenquellen. Auch das ist eine Form von Wrapper-"Klassen".

• Es gibt u.a. Streams für folgende Datenquellen:– Dateien (file)

– http und https

– ftp

– Standard-Ein/Ausgabe (php)

• Namen von Streams haben folgenden syntaktischen Aufbau:

"Quelle://Objekt"

Objekt ist in der Regel der Dateiname bzw. die URL.

Page 12: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

12Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

(1) $data= file_get_contents("file://opt/www/index.html");

(2) $data= file_get_contents("/opt/www/index.html");

(3) $data= file_get_contents("http://www.google.de/index.html");

(4) $data= file_get_contents("Klasse.php",true);

Beispiele I - file_get_contents

• Es wird der gesamte Dateiinhalt in die Variable $data eingelesen.

• (1) und (2) sind äquivalent.

• (3) zeigt, wie auf das Web zugegriffen werden kann.

• Der 2. Parameter in (4) bewirkt, dass die Datei entsprechend dem Include-Pfad in mehreren Ordnern gesucht wird.Dieser Pfad wird in der php.ini-Datei definiert.

• Siehe: http://php.net/manual/de/function.file-get-contents.php

Page 13: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

13Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

(1) file_put_contents("file://opt/www/index.html",$data);

(2) file_put_contents("/opt/www/index.html",$data);

Beispiele II - file_put_contents

• Aus der Variablen $data wird deren gesamter Inhalt als Datei geschrieben.

• Der erste Parameter ist der Dateiinhalt.

• (1) und (2) sind äquivalent.

• Siehe: http://php.net/manual/de/function.file-put-contents.php

Page 14: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

14Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

fopen und fclose

• Öffnen und Schließen von Dateien

• Das Handle ist ein Integer-Wert zur Identifikation der Datei.

• Modi:

Handle= fopen(Dateiname,Modus);

fclose(Handle);

Modus Erläuterung

r Read, Zeiger auf Anfang

r+ Read/Write , Zeiger auf Anfang

w Write, Zeiger auf Anfang, Neuanlage einer bestehenden Datei

w+ Read/Write , Zeiger auf Anfang, Neuanlage einer bestehenden Datei

a Write, Zeiger ans Ende

a+ Read/Write , Zeiger ans Ende

$fh= fopen("data.txt","r");

fclose($fh);

Page 15: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

15Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Abfrage auf End-of-File (EOF)

• Abfrage auf End of File (EOF)Diese Funktion liefert true, wenn das Ende der Datei erreicht ist, ansonsten false.

$fh= fopen("file.txt","r");while(!feof($fh)) {

....}

feof(Handle)

Page 16: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

16Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiel für Benutzung von Dateien

• Derselbe Code kann auch mit anderen Quellen arbeiten, z.B. mit$stream= "http://www.bla.de/index.html";

$stream= "http://www.bla.de/robots.txt";

In diesen Fällen wird eine Verbindung mit den entsprechenden Servern aufgebaut und über diese der Dateiinhalt geholt.

$stream= "index.php";$handle= fopen($stream,"r");while(!feof($handle)) { $data= fread($handle,1024); echo "$data";}fclose($handle);

Page 17: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

17Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

fgets, fgetss, fgetcsv

• Einlesen ganzer Zeilen mit der maximalen Länge von Länge.

• fgets() liest eine Zeile einschließlich HTML-Tags

• fgetss() liest eine Zeile und entfernt HTML-Tags, die durch Leerzeichen eersetzt werden. Diese Funktion ist ab PHP 7.3 nicht mehr zu benutzen.

• fgetcsv() füllt ein Array aus einer CSV-Tabelle, z. B. von Excel generiert; auch hier wird bei jedem Aufruf nur eine Zeile gelesen.

Zeile= fgets(Handle,Länge);Zeile= fgetss(Handle,Länge); // ab PHP 7.3 nicht mehrArray= fgetcsv(Handle,Länge,Trennzeichen);

Page 18: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

18Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiel I

$stream= "http://www.bla.de/index.html";$handle= fopen($stream,"r");while(!feof($handle)) { $data= fgetss($handle,400); echo "$data";}

• fgets() liest eine Zeile einschließlich HTML-Tags.

• fgetss() liest eine Zeile und entfernt HTML-Tags(es werden dann meist Leerzeilen entstehen).

Page 19: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

19Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiele II

1,Kritik der reinen Vernunft,Kant,"17,80",Philosophie2,Hamlet,Shakespeare,"32,00",Drama3,Die Leiden des jungen Werthers,Goethe,"15,20",Drama4,Die Physiker,Dürrenmatt,"7,50",Drama

$handle= fopen("Book.csv","r");$data= fgetcsv($handle,400);var_dump($data);fclose($handle);

array(5) { [0]=> string(1) "1" [1]=> string(26) "Kritik der reinen Vernunft" [2]=> string(4) "Kant" [3]=> string(5) "17,80" [4]=> string(11) "Philosophie"}

Page 20: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

20Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

fputs() und fwrite()

• Es wird das String/Array Text auf die Datei geschrieben.

• Beide Funktionen leisten dasselbe.

fputs (Handle,Text);fwrite(Handle,Text);

Page 21: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

21Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Strings I (Auszug)

Operation Erläuterung

string strtoupper(string a) Konvertierung zu Großbuchstaben

string strtolower(string a) Konvertierung zu Kleinbuchstaben

bin2hex(string c) Konvertiert nach Hexadezimal

int strlen(string s) Liefert die Länge des Strings s

Variable[Index] Zugriff auf ein Zeichen im String

Page 22: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

22Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiel

01-10

Dies ist ein Beispiel für eine Routine, die eine 0 liefert,wenn beide Strings gleich lang sind, eine 1, wenn dererste länger und eine -1, wenn der erste kürzer als derzweite String ist.

function CompLen($s1,$s2) { if(strlen($s1)==strlen($s2)) { return 0; } return((strlen($s1) > strlen($s2)) ? 1 : -1);}

echo CompLen("a","a")."\n";echo CompLen("ab","a")."\n";echo CompLen("a","ab")."\n";echo CompLen(42,"ab")."\n";

Page 23: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

23Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Strings II

Operation Erläuterung

explode(char c, string a [, int limit])

Teilt syntaktisch den String a anhand des Trenners c und liefert ein Array

implode(string a, array src) Setzt Array-Elemente durch a getrennt zu einem String zusammen

strtok(string a[, int delim])

Zerlegt Zeichenkette in Token, die einzeln bei jeden Aufruf geliefert werdensiehe: http://php.net/manual/de/function.strtok.php

Diese Routinen dienen der Analyse komplexer Eingaben.

Page 24: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

24Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiel

$str= "Hello world!";

for($token= strtok($str," ");$token!==false; $token= strtok(" ")) { echo "|$token|";}

|Hello||world!|Output

Page 25: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

25Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Strings III – Auszüge aus der langen Liste

int strpos(string alles, string such [, int offset])Es wird die Zeichenkette such im String alles ab der Positionoffset gesucht und deren Position bestimmt bzw. false geliefert.

int substr_count(string alles, string such)Wie strpos, nur dass die Häufigkeit von such in alles geliefertwird

string substr(string s, int offset [, int length])Es wird der Teilstring ab dem Index offset in s bis zur maximalenLänge length geliefert.

string substr_replace(string s,string neu,int offset [,int length])Der Bereich in s wird ab der Position offset mit der maximalenLänge length durch neu ersetzt.

string str_replace(string alt, string neu, string s)In s werden alle Teilstrings alt durch neu ersetzt.

Page 26: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

26Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Strings IV - Sonderfunktionen

Name Erläuterung

addslashes Setzt \ vor Sonderzeichen: ' " \ NUL

quotemeta Setzt \ vor Sonderzeichen: . \ + * [ ] ^ ( $ )

html_specialchars Ersetzt folgende Zeichen nach HTML: & " < >

ltrim Entfernt führende Leerzeichen (links)

rtrim Entfernt angehängte Leerzeichen (rechts)

trim Entfernt Leerzeichen vorne und hinten

Zur Überprüfung der Eingaben dient auch das Modul ctype.http://php.net/manual/de/book.ctype.php

Page 27: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

27Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Strings V - Formatierungen

string sprintf($Format, $arg1, $arg2 ...)

$Datum= sprintf("%04d-%02d-%02d", $year, $month, $day);

printf($Format, $arg1, $arg2 ...)

printf("%04d-%02d-%02d", $year, $month, $day);

Daneben gibt es noch die Funktionen sscanf etc. wie aus C und Java bekannt...

Dokumentation des Format-Strings:http://de3.php.net/manual/de/function.sprintf.php

Page 28: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

28Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Heredoc-Verkürzung

Zur Vereinfachung von String-Zuweisungen:

$str= <<<EOS Dies ist ein mehrzeiliger String, in dem auch PHP-Variablen ersetzt werden - es werden aber keine Escape-Zeichen vor einem " oder ' benötigt, was die Sache wirklich vereinfacht. EOS

• Statt "EOS" kann auch ein anderer String verwendet werden; dieser begrenzt den String auf der rechten Seite der Zuweisung.

• Das beendende "EOS" muss in der 1. Spalte der Zeile stehen, ein Einrücken ist nicht möglich.

• Der String "EOS" kann im Text selbst benutzt werden, aber nicht in der 1. Spalte einer Zeile stehend.

Page 29: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

29Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Arrays I

• int count(mixed var)

liefert die Anzahl der Elemente von var, z. B. von einem Array

• sort(array a [, int sorttyp])

sortiert das Feld a entsprechend der Sortierungsangabe sorttyp.Es stehen folgende Möglichkeiten zur Verfügung:

SORT_REGULAR: normale Sortierung (Default)

SORT_NUMERIC: numerische Sortierung (nach internem Wert)

SORT_STRING: alphanumerische Sortierung (nach Zeichenordnung)

• int array_search(mixed such, mixed alles)

durchsucht das Array alles nach dem String such und liefert den Index oder false

Page 30: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

30Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Arrays II

• int array_push(array stack, mixed var)

fügt var an das Array stack nach der Stack-Methode an.

• mixed array_pop(array stack)

entfernt vom Array Stack nach der Stack-Methode das letzte Element.

• int array_unshift(array queue, mixed var [, mixed var ...])

fügt die Elemente var etc. an den Anfang des Array queue an und liefert die neue Anzahl von Elementen.

• mixed array_shift(array queue)

liefert das erste Element und löscht dieses (nach vorne schieben).

Page 31: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

31Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Datum und Zeit

Index Erläuterung Index Erläuterung

tm_sec Sekunden tm_year Jahr (2-/3-stellig)

tm_min Minuten tm_wday Tag der Woche (0..6)

tm_hour Stunden tm_yday Tag des Jahres

tm_mday Tag im Monat tm_isdst Flag auf Sommerzeit

tm_mon Monat (0..11)

int time()

liefert die UNIX-Zeit in Sekunden seit 1.1.1970

array localtime(int UNIXZeit [, bool associative])

Es wird die Zeit UNIXZeit in ein Array konvertiert, das einHash ist, wenn associative true ist.

Die Indices dieses Hashes sind die folgenden:

Page 32: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

32Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiel

$now= time();

$what= localtime($now, true);echo $what['tm_mday']."\n";

$Monate= Array("Januar","Februar","März","April","Mai","Juni", "Juli","August","September","Oktober","November","Dezember");$jetzt= localtime(time(), true);$jetzt['tm_year']+= 1900; // auf 4 Stellen bringen

$Monat= $jetzt['tm_mon'];echo "Heute haben wir den Monat $Monate[$Monat]\n";

15Heute haben wir den Monat Juni

Page 33: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

33Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Formatieren der Ausgabe I

Deskriptor Erläuterung Deskriptor Erläuterung

%a, %A Abgekürzter, ausgeschriebener Wochentag %n Neue Zeile

%b, %B Abgekürzter, ausgeschriebener Monat %p "am" bzw. "pm"

%c Default %S Sekunden 00..59

%C Jahrhundert 00-99 %t Tabulator

%d Tag des Monats %u Tag der Woche

%H, %i Stunde 00..23, 01..12 %V Kalenderwoche 01..53

%j Tag des Jahres 001..366 %y, %Y Jahr 00..99, YYYY

%m Monatzahl 01..12 %Z Zeitzone

%M Minute 00..59 %% %

string strftime(string format [, int UNIXZeit])

entsprechend den Deskriptoren in format wird die aktuelle Zeit bzw. die in UNIXZeit angegebene Zeit als String geliefert.

Deskriptoren für format:

Page 34: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

34Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Formatieren der Ausgabe II

echo strftime("%A, der %d. %B %Y")."\n";echo strftime("%d.%m.%Y %H:%M:%S")."\n";echo strftime("Wir leben im %C.Jahrhundert, oder?")."\n";

Friday, der 15. June 201215.06.2012 20:54:59Warning: Invalid CRT parameters detected in ……

Unter Windows ist der %C-Wert (und noch andere) nicht implementiert.

Es muss eine Ersatzfunktion benutzt werden.

Output unter Windows

Page 35: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

35Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Formatieren der Ausgabe III - Windows

echo strftime_win32("%A, der %d. %B %Y")."\n";echo strftime_win32("%d.%m.%Y %H:%M:%S")."\n";echo strftime_win32("Wir leben im %C.Jahrhundert, oder?")."\n";

Friday, der 15. June 201215.06.2012 20:57:59Wir leben im 20.Jahrhundert, oder?

Dies ist zwar nicht richtig, aber von PHP korrekt realisiert, da %C die erstenbeiden Ziffern des Jahres liefert.

Output unter Windows (mit der Ersatzfunktion)

Page 36: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

36Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Konvertieren des Datums

int mktime(int hour, int minute, int second, int month, int day, int year)

erzeugt eine UNIX-Zeit aus den Parametern.

$Zeit= mktime(2,0,5,11,5,1980);echo strftime("Der %d.%m.%y war ein %A", $Zeit);

Bitte beachten:Das Datum für SQL-Abfragen gehorchtnicht dem deutschen Format!

Page 37: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

37Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Zeitangaben in SQL-Abfragen

Siehe: http://dev.mysql.com/doc/refman/5.1/de/date-and-time-functions.htmlDie obige Routine stammt aus der PHP-Doku-mentation.

function format_date($original, $format) { $format=($format=='date' ? "%m-%d-%Y" : $format); $format=($format=='datetime' ? "%m-%d-%Y %H:%M:%S": $format); $format=($format=='mysql-date' ? "%Y-%m-%d" : $format); $format=($format=='mysql-datetime'?"%Y-%m-%d %H:%M:%S": $format); return (strftime($format, strtotime($original)));} echo format_date("15.06.2012 15:00:00")."\n";echo format_date("15.06.2012 15:00:00","date")."\n";echo format_date("15.06.2012 15:00:00","datetime")."\n";echo format_date("15.06.2012 15:00:00","mysql-date")."\n";echo format_date("15.06.2012 15:00:00","mysql-datetime")."\n";

06/15/201206-15-201206-15-2012 15:00:002012-06-152012-06-15 15:00:00

Page 38: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

38Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Cookies I - Setzen

• Durch setcookie() wird ein Cookie generiert, das mit der korrespondierenden HTTP-Antwort zum Client gesendet wird.

• Name, Wert, Pfad und Domain sind Strings;Secure ist ein Boole'sches Flag

• Expiration ist das Verfallsdatum im UNIX-Zeit;dazu gibt es folgende Routinen (siehe oben):– time() liefert die aktuelle Uhrzeit als UNIX-Zeit

– mktime(hh,mm,ss,MM,DD,YYYY) generiert aus den Integer-Parametern die korrespondierende UNIX-Zeit

setcookie(Name, Wert, Expiration [, Pfad, Domain, Secure]);

Page 39: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

39Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiele

(1) setcookie("Name","Ferdinand I");(2) setcookie("Name","Ferdinand I",time()+7*24*60*60);

(3) setcookie("Essen[Name]","Amore");(4) setcookie("Essen[Sorte]","Spaghetti");(5) setcookie("Essen[Groesse]","Mega");

• (1) erzeugt einen Cookie, der mit Ende der Sitzung (Terminieren des Browsers) gelöscht wird

• (2) dasselbe jedoch mit einer Lebenszeit von 7 Tagen

• (3)-(5) setzen eines Hashs mit mehreren Cookies

Page 40: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

40Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Cookies II - Auslesen

• Die empfangenen Cookies werden über die CGI-Schnittstelle gelesen und im folgenden Hash abgelegt: $_COOKIE['CookieName'].

• In dem obigen Beispiel gibt es folgende Cookie-Werte:– $_COOKIE['Name'] mit dem Wert "Ferdinand I"

– $_COOKIE['Essen'] als Hash mit folgenden Werten:� $...['Name'] =="Amore"� $...['Sorte'] =="Spaghetti"� $...['Groesse']=="Mega"

• Da Cookies erzeugt oder verändert werden können, muss vor jeder Benutzung der Inhalt geprüft werden.

Es muss alles, was von draußen kommt, geprüft werden, alsoauch der Inhalt von Cookies.

Page 41: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

41Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Sessions I

• Session = Zuordnung von Variablen zu einem Benutzer, wobei diese Zuordnung über mehrere HTTP-Requests besteht

• Session-ID = zufälliger 32 bit-Schlüssel zur Identifikation eines Benutzers

• Alle HTTP-Requests mit derselben Session-ID führen dazu, dass registrierte Variablen allen Skripten zur Verfügung stehen

• Eine PHP-Session endet, wenn der Browser die Seite verlässt oder eine bestimmte Zeit der Inaktivität vergangen ist.

• Sessions lassen sich aber auch anders realisieren, d.h. ohne den PHP-internen Mechanismus zu benutzen.

Page 42: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

42Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Sessions II

• Die Session-ID kann in Cookies gespeichert werden, jedoch immer mit gesetztem Secure-Flag.Alternative: Übergabe per URL

• Sensible Dinge sollten immer per TLS übertragen werden, da unverschlüsselte Cookies/URLs erschnüffelt und auch von Proxies und Firewalls protokolliert werden können.

bool session_start()erzeugt eine Session oder setzt sie fort; liefert true, wenn es klappte.

string session_id([string key])liefert den 32 bit-Schlüssel zurück. Wird ein Parameter angegeben, so überschreibt dieser den aktuellen Wert.

bool session_destroy()löscht alle gespeicherten Daten der Session,danach ist session_start() notwendig

Page 43: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

43Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Beispiele

$Klappt_es= session_start();if($Klappt_es) { echo "Wow! ID= ".session_id();} else { echo "Schaaade";}

session_start();echo "Sie heißen $_SESSION['Name']";

session_start();$_SESSION['Name']= "Elisabeth Müller";$_SESSION['KundeNr']= "4711";

Definition derSession-Variablen

Spätere Benutzungder Session-Variablen

Page 44: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

44Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Bemerkungen

• session_start() muss vor dem ersten Generieren von Daten, d.h. ganz am Anfang, aufgerufen werden.

• Ausnahmen:– Ändern des Sessionnamens mit session_name(NeuerName);– Beim Hinzufügen von Objekten zu Sessions muss die

Objektdefinition vollständig geladen sein bevor session_start() aufgerufen wird.

• Es ist beim erstmaligen Zugriff auf eine Session-Variable deren Registrierung zu prüfen:

Beispiel:

if (isset($_SESSION['$CustomNumber'])) { $KundNr= $_SESSION['$CustomNumber'];}

Page 45: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

45Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Probleme und Fall Backs

• In jedem Formular ein verstecktes Feld (type="hidden") mit dem Wert der Session-ID generieren.Nicht so gute Lösung, denn– sie funktioniert nur innerhalb von Formularen, d.h. alles muss dann

per Formular abgehandelt werden.

– Oder die Session-ID wird als Teil einer einer URL verwendet (s.u.)

– dies ist nur bei der Methode POST sicher, denn es wird bei jedem Link über GET die Session-ID mit geliefert. Im Referer steht dann die Session-ID. Bei der URL-Verwendung wird immer GET verwendet.

Was ist, wenn keine Cookies benutzt werden können?

Beispiel:

<a href="...URL.../Scriptname?SID=<?php echo $SID?>">wenn in $SID die Session-ID abgelegt ist.

Page 46: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

46Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Lebensdauer von Sessions

• Eine Session endet spätestens, wenn der Session-Cookie verschwindet.

• Die Session-Cookies werden als temporäre Cookies dem Browser mitgeteilt, was bedeutet, dass sie mit dem Terminieren des Browsers gelöscht werden.

• Temporär werden sie dadurch, dass ihr Verfallsdatum in der Vergangenheit liegt.

• Wenn die Session-Daten später noch verwendet werden sollen, müssen sie serialisiert als String in eine Datenbank gebracht bzw. in eine Datei geschrieben werden.

• Zum Serialisieren von Sessions gibt es die Funktionen:– session_encode()

– session_decode()

• Zum Serialisieren von Objekten: serialize() und unserialize()

Page 47: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

47Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Und noch vieles mehr...

• Fehlerbehandlung, z. B. Laufzeitfehler

• Freie Socket-Programmierung

• Erstellen und Bearbeiten(!) von Grafiken

• Generieren von PDF

• FTP-Zugriffe

• Behandlung von XML

In PHP ist noch folgendes möglich:

und noch viele weitere Bibliotheken, die täglich mehr werden....

Page 48: Webtechnologien Teil 9: PHP IV - Bibliothekenwi.f4.htw-berlin.de/users/messer/LV/WI-WT-WS18/Folien/WT-09/09-WT-PHP... · Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken 6 Zugriff

48Webtechnologien - WS 2018/19 - Teil 9/PHP-Bibliotheken

Nach dieser Anstrengung etwas Entspannung...