Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
2Webtechnologien – SS 2017 - Teil 6/PHP I
Literatur I
[6-1] Lubkowitz, Mark: Webseiten programmieren und gestalten. Galileo, 2003
[6-2] Möhrke, Carsten: Besser PHP programmieren. Galileo, 4. Auflage, 2012
[6-3] Samar, Richard et al.: PHP de Luxe. mitp, 4. Auflage, 2004
[6-4] Möhrke, Carsten: PHP PEAR. Galileo, 2005
[6-5] Lerdorf, Rasmus; Bergmann, Sebastian; Hicking, Garvin: PHP kurz&gut. O'Reilly, 3. Auflage, 2006
[6-6] Bergmann, Sebastian: PHPUnit kurz&gut. O'Reilly, 2006
[6-7] Reimers, Stefan; Thies, Gunnar: PHP 5.3 & MySQL 5.1. 2. Auflage 2009
[6-8] Sklar, David; Trachtenberg, Adam: PHP5 Kochbuch. O'Reilly, 3. Auflage, 2009
[6-9] Schmidt, Stephan: PHP Design Patterns. O'Reilly, 2. Auflage, 2009
3Webtechnologien – SS 2017 - Teil 6/PHP I
Literatur II – Common Gateway Interface
[6-10] Schmidt, Stephan: PHP Design Patterns. O'Reilly, 2. Auflage, 2009
[6-11] http://de.wikipedia.org/wiki/Common_Gateway_Interface
[6-12] http://www.fh-wedel.de/~si/seminare/ws96/ausarbeitung/cgi/cgi0.htm
[6-13] http://www.fh-wedel.de/~si/seminare/ws96/ausarbeitung/cgi/cgi00.htm
[6-14] http://de.wikipedia.org/wiki/FastCGI
[6-15] http://www.fastcgi.com/devkit/doc/fcgi-spec.html
[6-16] http://www.fastcgi.com/drupal/
[6-17] The Common Gateway Interface (CGI) Version 1.1 http://www.ietf.org/rfc/rfc3875
4Webtechnologien – SS 2017 - Teil 6/PHP I
Literatur im Web
[W1] Grundlegende Dokumentation:http://www.php.nethttp://www.php.net/docs.php
[W2] http://de.wikipedia.org/wiki/PHP
[W3] Tipps und Code-Schnipsel:http://www.selfphp.info/de/extras/download.php
[W4] Erstes Tutorial (Deutsch): http://de.php.net/tut.php
[W5] http://php.net/manual/de/migration70.php http://php.net/manual/de/migration71.php
5Webtechnologien – SS 2017 - Teil 6/PHP I
Übersicht
• Geschichte
• Sinn und Aufgabe
• Datentypen
• Zugriff auf Formulardaten (CGI)
• Environment
• Kontrollstrukturen
• Funktionen
6Webtechnologien – SS 2017 - Teil 6/PHP I
Geschichte
In diesen Foliensätzen wird der Kern der PHP-Version 7.1.* behandelt.
1994 PHP/FI von Rasmus Lerdorf 2009 PHP Version 5.3
1995 PHP/FI 2.0 2012 PHP Version 5.4
1998 PHP Version 3 2013 PHP Version 5.5
2000 PHP Version 4 2014 PHP Version 5.6
2004 PHP Version 5 2015 PHP Version 7.0
2016 PHP Version 7.1
PHP = Personal Home Page Tools (ursprünglicher Name)PHP = PHP Hypertext Processor (aktueller Name)
7Webtechnologien – SS 2017 - Teil 6/PHP I
Ein paar Statistiken I – Oktober 2016
Aus:http://www.tiobe.com/index.php
TIOBE ProgrammingCommunity Index
8Webtechnologien – SS 2017 - Teil 6/PHP I
Ein paar Statistiken II – Oktober 2016
TIOBE ProgrammingCommunity Index
Aus:http://www.tiobe.com/index.php
9Webtechnologien – SS 2017 - Teil 6/PHP I
Ein paar Statistiken III – Oktober 2015
Aus:http://news.netcraft.com/archives/category/around-the-net/
Aus:http://w3techs.com/
10Webtechnologien – SS 2017 - Teil 6/PHP I
Ein paar Statistiken IV – Oktober 2015
Aus:http://w3techs.com/
11Webtechnologien – SS 2017 - Teil 6/PHP I
Benutzung
• Als eigenständiges Programm - auch mit Fenster-Unterstützung. Dies wird hier nicht behandelt.
• Zusammen mit HTML
– innerhalb des Webservers (Apache, Modul mod_php)
– als Skript in einem separierten Prozess (nicht behandelt)
• Die Skripte werden auf den Web-Server gebracht, indirekt vom Browser aufgerufen und auf dem Server ausgeführt.
• Die Ausgabe der PHP-Routinen wird dann zum Browser geschickt.
<?php ...PHP-Code... ?> XML/XHTML-Stil
Einbinden in die html-Datei
12Webtechnologien – SS 2017 - Teil 6/PHP I
Syntax
• Jeder Befehl wird mit einem Semikolon abgeschlossen.
• Datei-Endung ist .php
• Groß-/Kleinschreibung spielt in den meisten Fällen eine Rolle.
• Kommentare:
<?php# Kommentar bis Zeilenende
?>
<?php// Kommentar bis Zeilenende
?>
<?php/* Kommentar über mehrere Zeilen */
?>
13Webtechnologien – SS 2017 - Teil 6/PHP I
Das erste Programm bzw. die erste Seite I
<html>……… <body> <?php
echo "Hallo world! <br/>";?></body> </html>
• Alles außerhalb <?php … ?> geht direkt an den Browser.
• echo gibt den Parameter aus. Es ist auch eine durch Kommata getrennte Liste von Parametern möglich, die aneinander gereiht ausgegeben werden.
• echo kann mit oder ohne Klammern aufgerufen werden: mit Klammern ist aber nur ein Parameter möglich, keine Parameterliste.Z.B. echo("Hallo world! <br>");
• Zeichenketten werden in "" gestellt.
• Der Output aus PHP wird gemischt mit den HTML-Teilen in der Reihenfolge von vorn nach hinten an den Browser gesendet.
14Webtechnologien – SS 2017 - Teil 6/PHP I
Das erste Programm bzw. die erste Seite II
<html>……… <body><p> Das ist mein erstes PHP-Skript
<?php echo "Hallo world! <br/>";?>
<p> und das wars schon.</body> </html>
<html>……… <body><p> Das ist mein erstes PHP-Skript
<p> und das wars schon.</body> </html>
Hallo world! <br/> PHP-Prozessor
15Webtechnologien – SS 2017 - Teil 6/PHP I
Variablen und deren Deklaration
• Namen beginnen mit "$" gefolgt von "_" oder einem BuchstabenDanach kommen nur noch folgende Zeichen: "a-zA-Z0-9_"
• Groß-/Kleinschreibung unterscheidet!
• Variablen werden normalerweise nicht deklariert, es gibt aber Ausnahmen.
• Variablen haben den Typ aus der rechten Seite der letzten Zuweisung.
• Beispiele für Variablen
$Vorname
$a
16Webtechnologien – SS 2017 - Teil 6/PHP I
Zuweisungen
$Variable= Ausdruck;
• Zuweisungen wie in C, Java und JavaScript
• Beispiele:
$Vorname= "Elvira";
$a= $a+1;
$a= 10+100; // $a hat am Ende den Wert 110
$a= $b." "; // $a hat den Wert von b mit
// einem Blank angehängt
• Die Variable hat anschließend den Typ der rechten Seite der Zuweisung.
• Jede Zuweisung hat als Wert den Wert des Ausdrucks auf ihrer rechten Seite, die wiederum Teil eines umfassenden Ausdrucks sein kann.
17Webtechnologien – SS 2017 - Teil 6/PHP I
Einfache Datentypen (Basis-Datentypen)
Datentyp Beispiele für Werte Größe
Integer 23, -4, 0377 (Oktal),0xFF (Hexadezimal)
0b01010001 (Binär)
32 bit (Windows)
64 bit(falls möglich)
Double 3.1415, -2.2, 1.678e23, -2.4e-6 64 bit, IEEE754
Boolean • Für alle Werte außer 0: true
• Für 0-Werte: false
Operator Erläuterung
+ Addition
- Subtraktion
* Multiplikation
/ Division
% Modulo
19Webtechnologien – SS 2017 - Teil 6/PHP I
Strings II
• Namen von Variablen können und müssen manchmal mit {} geklammert werden, z. B.
$typ= 'Hoch'; $HS= "$typschule" ergibt '' $HS= "${typ}schule" ergibt 'Hochschule'
$typ= 'Grund';$GS= "${typ}schule" ergibt 'Grundschule'
$NN= '${typ}schule' ergibt '${typ}schule'
• Sonderzeichen "\" als Fluchtzeichen (Escape) nur in "…":
Zeichen Erläuterung Zeichen Erläuterung
\n Newline \$ $-Zeichen
\r Return \" "-Zeichen
\t Tabulator \077 Oktaler Wert
\\ \ selbst \xFF Hex-Wert
Hinweis:Es gibt keinBackspace (\b).
20Webtechnologien – SS 2017 - Teil 6/PHP I
Vergleichsoperatoren
Operator Erläuterung ergibt wahr wichtig
< kleiner 3<7
<= kleiner gleich 5.7<=10e4
> größer 3>2.9
>= größer gleich 3>=3.0
== gleich 9 == "9" Typanpassung!
!= ungleich 9!="s"
=== identisch 9 === 9 Keine Anpassung
!== nicht identisch 9 !== "9" Keine Anpassung
Beispiel Ergebnis
9 == "9" wahr
9 === "9" falsch
9 === 9 wahr
0x9 === 9 wahr
9.0 === 9 falsch
Die Identität erfordert, dass nebendem Wert auch der Typ gleich seinmuss.
21Webtechnologien – SS 2017 - Teil 6/PHP I
Zuweisungen mit Operatoren
Operator Beispiel Ergebnis nach $a= 9;
+= $a+= 1; 10
-= $a-= 1; 8
*= $a*= 2; 18
/= $a/= 2; 4,5
%= $a%= 2; 1
.= $a.= "zig"; "9zig"
Typisch:
$a= "Guten Tag!";$a.= "<br/>";
Diese Form der String-Zusammensetzungist sehr beliebt – aber: Vermeiden Sie das!
22Webtechnologien – SS 2017 - Teil 6/PHP I
Logische Operatoren
PHP PHP Erläuterung Java Pascal
and && Logisches Und && and
or || Logisches Oder || or
xor Logisches Exklusiv-Oder
! Negation ! not
Beispiel
($a!=0) and ($b=="Evelyn")($a!=0) && ($b=="Evelyn")
Siehe dazu: http://www.php.net/manual/de/language.operators.logical.php
Achtung! Die gleichen Operatoren &&/and und ||/or haben eineunterschiedliche Bindungsstärke!Immer(!) Klammern setzen!
23Webtechnologien – SS 2017 - Teil 6/PHP I
Konvertierung von Typen
• Werte werden in den "erwarteten" Typ konvertiert.
• Innerhalb von Ausdrücken nach Integer, wenn ein Teil ein Integer ist, sonst Double, wenn ein Teil vom Typ Double ist.
Ausdruck Ergebnis
"3" + "4" 7
"3" . "4" "34"
"3" - "Eier" 3, da 3-0
"3 Äpfel"*"12 Birnen" 36
Bei der Konvertierung von String nach Integer wird von linksnach rechts solange konvertiert wie eine sinnvolle Zahl von linksnach rechts gelesen existiert. Startwert ist 0.
24Webtechnologien – SS 2017 - Teil 6/PHP I
Konvertierung nach Boolean
Bedeutung Werte anderer Typen Typ
false 0 Integer
0.0 Double
"0" (ist Integer 0 (!)) String
"" (Leerer String) String
'' (Leerer String) String
Leeres Array Array
Leeres Objekt Object
Alles andere bedeutet true.
25Webtechnologien – SS 2017 - Teil 6/PHP I
Abfragen des Typs I
Funktion True, wenn Variable
is_long(Variable) vom Typ long ist
is_double(Variable) vom Typ double ist
is_string(Variable) vom Typ string ist
is_array(Variable) ein Array ist
is_object(Variable) ein Object ist
is_bool(Variable) vom Typ bool ist
Funktionen zum Abfragen des Typs einer Variablen:
gettype(Variable) liefert den aktuellen Typ als String, bestimmt ihn aber nicht.
Diese Funktion sollte eigentlich nicht verwendet werden, da der Rückgabe-wert in Zukunft geändert werden könnte.Siehe dazu: http://de3.php.net/manual/de/function.gettype.php
26Webtechnologien – SS 2017 - Teil 6/PHP I
Abfragen des Typs II
Funktion True, wenn
is_null(Variable) Variable den NULL-Wert hat
isset(Variable) Variable keinen NULL-Wert hat
Der Null-Wert ist auch gleich der einzige Wert des Typs Null.
Funktionen zum Abfragen von Werten einer Variablen:
27Webtechnologien – SS 2017 - Teil 6/PHP I
Typumwandlungen / Cast
Cast Umwandlung in
(bool),(boolean) Boolean
(int), (integer) Integer
(real), (double), (float) Double
(string) String
(array) Array
(object) Objekt
cast-Operatoren:
Mit diesen Operatoren werden explizit die Typen innerhalb von Ausdrücken festgelegt.
Siehe dazu:http://www.php.net/manual/de/language.types.type-juggling.php
28Webtechnologien – SS 2017 - Teil 6/PHP I
ARRAY
• Es gibt nur 1-dimensionale Felder mit einem positiven Integer-Index (einschließlich 0).
• Die Indizes laufen von 0 bis zur Größe -1.
• Auf Array-Elemente wird durch Name[Expression] zugegriffen.
• Arrays werden durch elementweises Zuweisen erstellt:
• Dasselbe in einem Stück und in gleichwertigen Versionen:
$a[0]= "Hallo";$a[1]= "Gerhardt";$a[2]= "!";
$a[]= "Hallo";$a[]= "Gerhardt";$a[]= "!";
Das Weglassen der Indices bewirkt ein hinten Anhängen miteinem gleichzeitigen Erhöhen des höchsten Indexes.
$a= array("Hallo","Gerhardt","!");
$a= ["Hallo","Gerhardt","!"];Verkürzte Form
29Webtechnologien – SS 2017 - Teil 6/PHP I
HASH
• Ein Hash ist ein Array, wobei der Index ein String ist. Oder anders formuliert: Die Elemente haben einen Namen.
• Auf Hash-Elemente wird durch Name['String'] zugegriffen.
• Ein Hash wird als Menge von Paaren (Index, Value) aufgefasst.
• Hashs werden durch elementweises Zuweisen erstellt:
• Dasselbe in einem Stück:
$b= array("Anrede"=>"Frau","Vorname"=>"Elvira", "Nachname"=>"Meier-Vormann");
$b= ["Anrede"=>"Frau","Vorname"=>"Elvira", "Nachname"=>"Meier-Vormann"];
$b["Anrede"] = "Frau";$b["Vorname"] = "Elvira";$b["Nachname"]= "Meier-Vormann";
Verkürzte Form
30Webtechnologien – SS 2017 - Teil 6/PHP I
ARRAY und HASH
• Der Typ von Array/Hash-Elementen kann innerhalb eines Arrays/Hashs beliebig verschieden sein.
• 2- oder mehrdimensionale Felder müssen – wie in Java – stückweise zusammengebaut werden, denn es gibt nur Vektoren.
• Beide Strukturen werden intern gleich implementiert, d.h. es handelt sich um eine lineare Liste, die aus Paaren von einem Schlüssel (Key, Indexwert) und dem Wert bestehen – genauso wie in JavaScript.
• Es können "Lücken" im Array vorhanden sein, die beim Zugriff in For-Schleifen beachtet werden müssen: wenn auf diese Lücken zugegriffen wird, gibt es eine Exception.
31Webtechnologien – SS 2017 - Teil 6/PHP I
if
• Wenn nur ein Befehl in einem Block vorkommt, könnten auch die {} weggelassen werden (was zu vermeiden ist).
• Die elseif-Konstruktion ist eine verkürzte Version eines geschachtelten IF-Konstrukts.
if(Ausdruck) { ....} [ else { ....} ]
if(Ausdruck) { ....} elseif (Ausdruck) { ....} elseif (Ausdruck) { .... ....}
32Webtechnologien – SS 2017 - Teil 6/PHP I
switch
• Das Switch-Konstrukt ist wie in C/C++/Java.
• Fehlt das break, werden die folgenden Statements ausgeführt.
switch(Ausdruck) { case Wert: .... [break;] case Wert: .... [break;] .... default: ....}
33Webtechnologien – SS 2017 - Teil 6/PHP I
while
• Auch hier dieselbe Semantik wie in C/C++/Java.
do { .... ....} while(Ausdruck);
while(Ausdruck) { .... ....}
34Webtechnologien – SS 2017 - Teil 6/PHP I
For-Schleife
• Auch hier wieder dieselbe Semantik wie in C/C++/Java.
• break bricht die Schleife ab.
• continue springt zurück zur Abbruchabfrage Ausdruck.
for(Start; Ausdruck; Veränderung) { .... ....}
35Webtechnologien – SS 2017 - Teil 6/PHP I
Foreach-Schleife
• Hier wird die Schleife immer für jedes Element durchlaufen, wobei $Variable die Laufvariable bzw. $Key der "Laufschlüssel" ist.
• Feld ist etwas, das als Array oder Hash interpretiert werden kann.
• Die erste Form wird bei Arrays, die zweite bei Hashs benutzt.
• Dies entspricht der For-In-Schleife bei JavaScript (und auch Java).
• Wenn ein Array/Hash Löcher haben kann, sollte möglichst diese Form der Schleife benutzt werden, da diese alle Löcher automatisch überspringt.
foreach(Feld as $Variable) { ....}
foreach(Feld as $key => $Variable) { ....}
Array
Hash
36Webtechnologien – SS 2017 - Teil 6/PHP I
Funktionen I
• In PHP können Funktionen an beliebiger Stelle definiert werdenEmpfehlung: Deklarieren am Anfang an zentraler Stelle
• Parameter werden per Call-By-Value übergeben,d.h. die Werte der Parameter werden kopiert.
• Es ist aber möglich die Adresse des Parameters mit & zu übergeben - das gilt analog auch für das Funktionsresultat.
• Sonderregelung bei den Objekten! Objekte werden immer per Adresse übergeben, nie als Kopie – also wie in Java.
function Name($arg1, $arg2, $arg3,.., $argN) { .....}
function Name($arg1, $arg2, $arg3,.., $argN) { ..... return Ausdruck;}
37Webtechnologien – SS 2017 - Teil 6/PHP I
Funktionen II
• Parameter mit Defaultwerten können dann beim Aufruf weggelassen werden.
• Wenn Parameter ohne Default-Werte beim Aufruf weggelassen werden, dann haben diese im Funktionskörper keinen Inhalt.Dies muss in der Funktion explizit geprüft werden.
• Jede Funktion kann mit beliebig vielen Parametern mit beliebigen Werttypen aufgerufen werden – unabhängig von der Deklaration.Die aufgerufene Routine muss dies berücksichtigen. Es gibt aber einen Mechanismus, um dies zu verhindern: ab PHP 7
function Hello($Name= "Helmut") { echo "Hallo ".$Name;}
Hello(); // gibt "Hallo Helmut" ausHello("Hanna"); // gibt "Hallo Hanna" aus
38Webtechnologien – SS 2017 - Teil 6/PHP I
Type Hints ab PHP 7 I
string
int
float
bool
array
Klassennamen
Interface
declare(strict_types=1);
function add(int $a, int $b) { return $a + $b;}function sub(int $a, int $b): int { return $a - $b;}$u= add(10,20);$v= sub(26,9);echo '$u='.$u.' $v='.$v;
Ausgabe: $u=30 $v=17
Es ist möglich, wie in anderenProgrammiersprachen für dieParameter und Resultate vonFunktionen Typen anzugeben.
Folgende Typen sind möglich:
Dies ist aber nur möglich, wenn als erstes die declare-Anweisung wie obenangegeben wird.
39Webtechnologien – SS 2017 - Teil 6/PHP I
Type Hints ab PHP 7 II
function writeHW(bool $what): ?string{ if($what) { return 'Hallo World'; } else { return null; }}var_dump(writeHW(true));var_dump(writeHW(false));
function write(?string $str){ var_dump($str);}write('Hello');write(null);
string(11) "Hallo World"NULL
string(5) "Hello"NULL
Wenn statt eines Wertes vom erwarteten Typ ein Null auch geliefert bzw.übergeben werden kann, wird dies durch ein vorlaufendes ? Gekennzeichnet.
40Webtechnologien – SS 2017 - Teil 6/PHP I
Type Hints ab PHP 7 III
function swap(&$left, &$right): void{ if ($left === $right) { return; } $tmp = $left; $left = $right; $right = $tmp;}$a = 1;$b = 2;var_dump(swap($a, $b), $a, $b);
Die Routine swap tauscht diebeiden Variablen, die mit Call-by-Reference übergebenwurden (&).Diese Routine liefert immer null.
Quelle:http://php.net/manual/de/ migration71.new-features.php
NULLint(2)int(1)
Ist der Return-Typ mit void deklariert, so darfein return-Statement fehlen oder es wird ohneeinen Parameter benutzt.
41Webtechnologien – SS 2017 - Teil 6/PHP I
Ausgabe-Routinen
echo $Stringprint $String
Gibt den String auf der Console aus.
var_dump(Expression) Gibt den Ausdruck samt Typ formatiert aus.http://php.net/manual/de/function.var-dump.php
var_export(Expression) Gibt den Ausdruck samt Typ so formatiert aus, dass dieser der PHP-Syntax entspricht http://de2.php.net/manual/de/function.var-export.php
Zur Ausgabe von Arrays oder Hashs ist var_export() sehr gut.
42Webtechnologien – SS 2017 - Teil 6/PHP I
Variablen als "Funktionen"
function func() { ....}$fcall= "func";$fcall();
Große Vorsicht, wenn der Funktionsname aus einem Formularstammt!
!
43Webtechnologien – SS 2017 - Teil 6/PHP I
Geltungsbereich in PHP
• In der linken Version wird nichts ausgegeben, denn die Variable $str in Ausgabe() ist lokal, in der rechten Version ist sie global; daher wird dort „Hallo World!" ausgegeben.
• Globale Variablen werden außerhalb von Funktionen deklariert und benutzt, aber nicht innerhalb von Funktionen - es sei denn sie werden dort mit dem Schlüsselwort global deklariert.
• Merke:Der erste Zugriff auf eine nicht vorhandene Variable erzeugt diese in dem Kontext des Zugriffs, also lokal oder global.
• Die oben vorgestellten Arrays $_GET[] sind überall global und können lokal ohne Deklaration benutzt werden.; daher heißen diese superglobal.
function Ausgabe() { echo $str;}$str= "Hallo World!";Ausgabe();
function Ausgabe() { global $str; echo $str;}$str= "Hallo World!";Ausgabe();
44Webtechnologien – SS 2017 - Teil 6/PHP I
Geltungsbereich III
• Mit static wird eine lokale Variable mit einer Lebenszeit des gesamten Skripts lokal deklariert.
function Counter() { static $cnt= 0; if($cnt==0) { echo "Erster Aufruf!\n"; } else { echo "Schon $cnt mal aufgerufen.\n"; } $cnt++;}Counter();Counter();Counter();Counter();
Erster Aufruf!Schon 1 mal aufgerufen.Schon 2 mal aufgerufen.Schon 3 mal aufgerufen.
45Webtechnologien – SS 2017 - Teil 6/PHP I
Bemerkung über Deklaration
• In PHP werden Variablen üblicherweise nicht deklariert.
• Es gibt aber bisher folgende Ausnahmen:
– Variablen als Parameter
– Globale Variablen sollen lokal verwendet werden.
– Lokale Variablen sollen static (statisch) sein.
– (Bei den den Klassen gibt es noch weitere Ausnahmen)
46Webtechnologien – SS 2017 - Teil 6/PHP I
Einfügen externer Dateien I
• An jeder Aufrufstelle werden die Dateien als dorthin kopiert betrachtet.Dies bedeutet, dass an allen Stellen im PHP-Skript, also auch in Kontrollkonstrukten, include bzw. require verwendet werden darf.
• Bei beiden Konstrukten wird zu Beginn der Datei Filename in den HTML-Modus gewechselt; daher sind die PHP-Start-/Ende-Tags(<?php ... ?>) in den externen Dateien erforderlich.
• Besonderheit von include: Trotz Fehlern wird weiter gearbeitet
• Besonderheit von require: Bei Fehlern erfolgt Abbruch.
• Beide können mehrfach – auch geschachtelt - ausgeführt werden.
require(Filename);include(Filename);
require("Prefix.inc.php");include("Deklaration.inc.php");
49Webtechnologien – SS 2017 - Teil 6/PHP I
Schnittstelle zwischen Server und Skript (CGI)
Web-Server
PHP-Processor
Schnitt-stelleerstellt(2)
read(1) ruftauf(3)
Die Schnittstellebesteht aus Hashs:
$_GET[] Formulardaten
$_POST[] Formulardaten
$_SERVER[] Daten über Webserver
$_COOKIE[] Cookies
$_ENV[] Daten über Umgebung
$_SESSION[] Session-Variablen
$_FILES[] Hochgeladene Dateien
benutzt(4)
50Webtechnologien – SS 2017 - Teil 6/PHP I
Beispiele für Server-Variablen
Variable Bedeutung
$_SERVER['PHP_SELF'] Pfadname zum Skript selbst
$_SERVER['HTTP_HOST'] Name, IP-Adresse des Geräts mit dem Server
$_SERVER['HTTP_USER_AGENT'] Browsernamen
$_SERVER['HTTP_REFERER'] Vorherige URL beim Browser
$_SERVER['REMOTE_ADDR'] Name, IP-Adresse des Browsers
$_SERVER['SCRIPT_FILENAME'] Absoluter Pfadname des Skripts
$_SERVER['HTTPS'] Wird gesetzt, wenn mit https zugegriffen wird
Siehe dazu: http://php.net/manual/en/reserved.variables.server.php
51Webtechnologien – SS 2017 - Teil 6/PHP I
Daten aus Formularen I
• Der Name des INPUT-Tags ist Name des PHP-Hashs mit dem Inhalt des INPUT-Tags.
• Beispiel:
<form action="ID.php" method="get">Name: <input type="text" name="user"/><br/>Passwort:<input type="text" name="password"/><br/><input type="submit" value="Login"/>
</form>
Im Skript ID.php sind damit die Variablen $_GET['user'] und$_GET['password'] gesetzt.
Wird mit der Methode POST gearbeitet, so heißen die Variablen:$_POST['user '] und $_POST['password']
52Webtechnologien – SS 2017 - Teil 6/PHP I
Daten aus Formularen II
• Dies geht auch mit Feldern bei Mehrfachauswahl:
<form action="pizza.php" method="post">Pizza mit
<select name="Zutaten[]" size="3" multiple> <option>Peperoni</option> <option>Schnittlauch</option> <option>Spaghetti</option></select><input type="submit" value="Bestellen"/>
</form >
Dann existiert ein Array mit den selektierten Werten, aufdas mit $_POST['Zutaten'] zugegriffen werden kann.
53Webtechnologien – SS 2017 - Teil 6/PHP I
Daten aus Formularen III
Variable Beispiel Erläuterung
$_GET $_GET['Vorname'] Zugriff auf Formularelemente
$_POST $_POST['PLZ'] Zugriff auf Formularelemente
$_REQUEST $_REQUEST['Vorname'] Zusammenfassung von $_GET, $_POST und $_COOKIE
$_FILES $_FILES['Datei'] Enthält Informationen über hoch geladene Dateien
54Webtechnologien – SS 2017 - Teil 6/PHP I
Superglobal
• Die aufgeführten Hash/Variablen sind global und brauchen nicht deklariert zu werden. Dies wird als superglobal bezeichnet.
• Aus Sicherheitsgründen sollte der Zugriff auf die Formulardaten immer über den vorgestellten Mechanismus erfolgen.
55Webtechnologien – SS 2017 - Teil 6/PHP I
Nach dieser Anstrengung etwas Entspannung...