4. Serverseitige Verarbeitung und PHP

Transcription

4. Serverseitige Verarbeitung und PHP
4. Serverseitige Verarbeitung und PHP
Inhalt:
 CGI (Common Gateway Interface)
 PHP





Einführung in die Sprache
Formularverarbeitung mit PHP
Dateizugriff aus PHP-Skripten
PHP: Cookies, Sessions
Datenbankzugriff aus PHP-Skripten
 Exkurs: Relationale Datenbanken und SQL
 Exkurs: Microsoft ASP (Active Server Pages, IIS, .NET)
Peter Sobe
Internettechnologien
1
3-Tier-Architekturen
Bislang betrachtet:
2-Tier Architekturen
3-Tier Architekturen
Javascript
Javascript
Webbrowser
Webbrowser
JavaScript
JavaScript
HTML, XML, +eingebettete Formate
server-seitiges
Scripting
Webserver
Peter Sobe
Webserver
Internettechnologien
PHP
2
ng
CGI
Common Gateway Interface
client
< html>
<head>
<title>Test</title>
<br>
<p>Die Lottozahlen</p>
<!-- #exec cgi=“/cgi-bin/lottozahlen.cgi“ -- >
browser
</body>
</html>
server
HTTP
web-server
Common
Gateway
Interface
(CGI)
Grossmann/Sobe
#!"C:\xampp\perl\bin\perl.exe"
my $l1=2;
my $l2=$l1+1;
CGI –
…
Programm printf “%d %d %d %d %d %d”,
$l1,$l2,$l3,$l4,$l5,$l6;
3
ng
CGI
CGI-Referenzen aus Webseiten (HTML)
Die Skripte befinden sich auf dem Serverrechner in einen dem Webserver
per Konfiguration bekannten Verzeichnis (cgi-bin).
Skripte werden über eine cgi-bin-Referenz verlinkt und darüber aufgerufen.
Die Ausgabe eines Skripts (dessen Konsolenaugabe, stdout) bestimmt die
Antwort des Webservers.
Mehrere Möglichkeiten zur Skript-Einbindung:
CGI-Skript als Link:
Beim Folgen des Links wird in Server das Skript aufgerufen. Die Ausgabe des
Skripts bestimmt, was im Browser nach dem Folgen des Links angezeigt wird .
<a href=”/cgi-bin/erzeugeDynHTML.pl”> Link folgen! </a>
CGI-Skript anstelle eines Bildes:
Eine Bild-Referenz kann auf ein CGI-Skript verweisen, das als Ausgabe ein Bild
erzeugt. Die Ausgabe muß im GIF- oder JPG-Format erfolgen.
<img src=”/cgi-bin/erzeugeBild.pl” />
Peter Sobe
4
CGI
Inline-Aufruf, s.g. Server-Side-Include
Ein externes Skript kann mit seine Ausgaben dynamischen Inhalt an eine
ausgewählte Stelle im HTML-Dokument einfügen.
<!-- #exec cgi=“/cgi-bin/create_content.pl“ -- >
CGI-Skript als Redirektion der aufgerufenen Webseite:
Eine Webseite kann durch ein meta-Tag das Laden einer anderen Webseite, oder
auch das Ausführen eines CGI-Skripts veranlassen, ohne eigenen Inhalt als HTML zu
kodieren.
<head>
<meta http-equiv=“refresh” content=“0, URL=/cgi-bin/erzeugeDynHTML.pl”/>
</head>
CGI-Skript als Formularaktion:
Ein Formular kann beim Absenden ein externes serverseiteigs Skript aufrufen. Das
Skript erhält die Formulardaten (z.B. Request-Body bei POST) als Eingabe (stdin).
<form action=”/cgi-bin/auswertung.pl” method=”POST”>
Peter Sobe
5
ng
CGI
CGI-Skripte werden als normale Prozesse auf dem Server-Betriebssystem
ausgeführt und laufen unter jenem Nutzernamen, von dem aus der
Webserver gestartet wurde.
In UNIX/Linux Systemen ist das oft der Nutzer ”www”.
Über CGI-Skripte können auch Dateien geschrieben und später wieder
gelesen werden.
Peter Sobe
6
CGI und Server-APIs
CGI - Nachteile:
• Über CGI startet der Webserver externe Prozesse zur
Ausführung der Skripte. Das ist vergleichsweise teuer, wenn
hochfrequentierte Server viele kleine Skripte ausführen müssen.
→ Hohe CPU-Last der Web-Server
→ Schlechte Antwortzeiten bei Belastung
Weiterhin müssen Daten zwischen verschiedenen Prozessen
(unterschiedliche Adressräume) bewegt werden.
Technische Lösung:
Der Webserver wurde später mit internen Schnittstellen und
Modulen zur Interpretation der Skripte ausgestattet,
s.g. Server Application Programming Interfaces. Die oben
aufgeführten Nachteile erübrigen sich dadurch.
Beispielsysteme: Apache Webserver + PHP
Internet Information Server + ASP
Grossmann/Sobe
7
Integrierte Server-APIs
< html>
<head>
<title>Test</title>
<br>
Hallo
PHP
</body>
</html>
browser
client
server
PHP
(module)
.php
<?php
$str=“Hallo PHP”
If ($var==$res)
echo $str;
?>
DB
(MySQL)
Apache web-server PHP as
integrated Apache module
Grossmann/Sobe
8
serverseitige Verarbeitung
Serverseitige Programmierschnittstellen:
Netscape: NSAPI (Netscape Server Application Programming Interface),
für Netscape Enterprise Server,
Programmierschnittstelle, die es erlaubte, den Server
zu erweitern, z.B. um server-sided JavaScript
Hintergrund: Netscape war eine der esten Firmen, die einen
Web-Browser und eine Webserver bereitstellten (ab ca. 1994).
Wurden inzwischen von AOL und Sun übernommen
Microsoft: ISAPI (Internet Server Application Programming Interface),
darauf aufbauend ASP mit Visual Basic Script und Jscript
Apache-Projekt: integriertes PHP-Modul
(PHP ist inzwischen auch für Microsoft-Plattformen
verfügbar)
Grossmann/Sobe
9
ASP: Active Server Pages
ASP
Active Server
Pages
HTTP-Response
client
HTTP-Request
Build-InObjects
Script-engine
Component A
ADO
Component B
WWW Server
ADO – ActiveX Data
Objects, u.a. ADODB
Objekt für Datenbanken
Grossmann/Sobe
DB
DB
10
ASP: Active Server Pages
Allgemeines:
ASP ist die serverseitige Schnittstelle zu
Skripten/Programmen ausgehend von Microsoft Internet
Information Server (z.B. in Windows Server enthalten)
Skript- und Programmiersprachen
ASP 2/3: Visual Basic Skript und JSkript
ASP.NET:
mehrere Sprachen im Rahmen von .NET:
 Visual Basic
 C/C++
 C#
Grossmann/Sobe
11
ASP
Konzept/Varianten:
 eingebetteter Code (Inline, durch <% … %> eingefasst).
Mischung von Webseitencode in HTML mit Programmcode
(Visual Basic oder C#)
 Code-behind Modell: gesonderte Quelltextmodule mit Klassen,
die Methoden für Web-Elemente bereitstellen
Durch ASP-Framework werden auch Elemente zur clientseitigen
Interaktion mittels JavaScript bereitgestellt
Der Programmcode wird übersetzt und innerhalb des IIS (Microsoft
Webserver) ausgeführt.
Entwicklungsumgebung: Microsoft Visual Studio
mit Visual Web Developer (lokaler Webserver)
Peter Sobe
Internettechnologien
12
ASP: eingebetteter Visual Basic Code
Beispiel für eine ASP.NET- Webseite:
<%@ Page Title="Beispiel" Language="vb" MasterPageFile="~/Site.Master"
AutoEventWireup="false“ CodeBehind="Default.aspx.vb„
Inherits="WebAppASPNET._Default" %>
<asp:Content ID="HeaderContent" runat="server„
HTML-, Head- und Body-Tags
ContentPlaceHolderID="HeadContent">
werden serverseitig
</asp:Content>
automatisch erzeugt.
<asp:Content ID="BodyContent" runat="server"
ContentPlaceHolderID="MainContent">
<h2> Eine ASP.NET-Beispielanwendung </h2>
<%
For i = 1 To 3 %>
gewöhnliche HTML- Elemente
<p> Hallo </p>
<% Response.Write(i)
eingebetteter Code
(hier Visual Basic)
Next
%>
</asp:Content>
Peter Sobe
Internettechnologien
13
ASP: Nutzer-Interaktion
Das Request-Objekt stellt die notwendigen Daten und Methoden bereit,
um Eingaben vom Client auszuwerten.
Das Request-Objekt besteht aus (Auflistung nicht vollständig):
 Form-Collection: um Formulardaten zu lesen, die mit der Methode
POST abgesendet wurden
 Query-String-Collection: für mit der GET-Methode abgesendete
Formulardaten
 ServerVariables-Collection: für Daten aus dem HTTP-Header
 Cookies-Collection: um s.g. Cookies auszulesen
 TotalBytes- und BinaryRead-Properties:
um Datei-Uploads zu behandeln
Grossmann/Sobe
Internettechnologien
14
Einführung PHP (1)
PHP (Hypertext Processor) zur Skriptverarbeitung innerhalb
Hypertext (HTML)
PHP gehört zur C-Sprachfamilie, d.h. die Syntax ist weitgehend an
C bzw. C++ angepasst
PHP wurde 1994 von Rasmus Lerdorf als Tool zur
Programmierung seiner Homepage entwickelt. PHP ist eine
serverseitige Skriptsprache zur Entwicklung von dynamischen
Webseiten.
PHP dient u.a. dem Zugriff auf serverseitige Datenbanken.
(PHP und MySQL)
Peter Sobe
Internettechnologien
15
Einführung PHP (2)
Erkennt der Server den Aufruf von PHP-Seiten oder HTML-Seiten mit
integrierten PHP-Inhalten, so übergibt er diese an ein Modul, das
diese interpretiert. Die Skripte erzeugen in der Regel HTML-Texte
oder anderen Inhalt, die in das HTML-Dokument ausgegeben werden.
Erst danach wird das Dokument vom Server zum Browser übertragen.
Der Server erkennt am Dateityp “php“ (anstelle htm/html), dass das
Dokument PHP-Skripte enthält. Dabei ist es auch möglich, dass das
gesamte Dokument nur aus einem Skript besteht.
Ist der Dateityp htm oder html, so müssen Skriptteile, die serverseitig
abgearbeitet werden, durch spezielle Tags, die in der XMLTechnologie als Verarbeitungsanweisungen (processing instructions)
bezeichnet werden, gekennzeichnet werden. Diese Tags sind:
<?ziel ….?>
z.B. <?xml …?>, <?xml-stylesheet …?>, <?php …?>.
Peter Sobe
Internettechnologien
16
Einführung PHP (3)
Andere PHP-Dateien können dann statisch oder dynamisch über
die PHP-Anweisungen require(…); bzw. include(); eingebunden
werden.
statische Einbindung: erfolgt über die PHP-Anweisung
require(″Pfad/Dateiname″);
z.B. require(″Skripte/Bibliothek1/Ausgabe.php″);
Bei der statischen Einbindung wird der Text vor der Ausführung
durch den Interpreter an diese Stelle eingefügt.
dynamische Einbindung: erfolgt über die PHP-Anweisung
include(″Pfad/Dateiname″); z.B.
include(″Skripte/Bibliothek1/Ausgabe.php″); Bei der dynamischen
Einbindung wird der Text erst während der Ausführung durch den
Interpreter an dieser Stelle wie eine Funktion ausgeführt. Damit ist
es möglich, durch Verwendung einer return-Anweisung ein
Ergebnis, dass durch dieses Skript erzeugt wurde, an das
Dokument zu übergeben.
Peter Sobe
Internettechnologien
17
Einführung PHP (4)
Unterschiede gegenüber C und JavaScript:
 Die Bezeichnungen von Variablen beginnen immer mit dem
Zeichen $.
 Variable müssen nicht deklariert werden,
ihr Typ (integer, single, string, array, object, … ) wird mit der
ersten Zuweisung festgelegt.
 Da es im Gegensatz zu C einen impliziten Typ String gibt, sind
auch String-Operatoren, wie z.B. ″.″ für die Verkettung von
Zeichenketten, definiert.
Da keine Deklarationen existieren, ist eine Funktion isset(…)
vorhanden, um die erfolgte Zuweisung zu einer angegebenen
Variablen festzustellen.
Mit der Funktion unset(…) kann man eine Variable löschen.
Peter Sobe
Internettechnologien
18
Einführung PHP (5)
Die PHP-Version sowie weitere Details der PHP-Installation lassen
sich auf einer Plattform durch die PHP-Funktion phpinfo()
anzeigen.
<?php
phpinfo();
?>
Peter Sobe
Internettechnologien
19
Einführung PHP (6)
PHP-Kommentare
sind identisch zu C-Kommentaren, d.h. ein Kommentar, der bis
zum Zeilenende wirkt, wird durch // eingeleitet.
Ein mehrzeiliger Kommentar beginnt mit der Zeichenkombination /*
und endet mit der Zeichenkombination */.
→ wie in JavaScript
PHP-Ausgabe von Daten
Die Ausgabe von Inhalten, die durch ein Skript erzeugt wurden, in
ein HTML-Dokument ist sehr wichtig. Für die Ausgabe stehen zwei
Funktionen echo; und print(); zur Verfügung.
Ausgabe von HTML-Code:
Sollen z.B. Werte auf neue Zeilen ausgegeben werden, so können
in echo innerhalb von Zeichenketten auch HTML-Tags, wie z.B.
<br /> (neue Zeile) ausgegeben werden.
Peter Sobe
Internettechnologien
20
Einführung PHP (7)
Beispiel für Ausgabe und Kommentare:
<?php
//Hier steht ein einzeiliger Kommentar
echo 'Das Skript enthält 2 Kommentare, ',
" einen 'einzeiligen' und einen \"mehrzeiligen\" Kommentar!";
/* Die echo-Anweisung kann eine Liste von Werten,
die durch Komma getrennt sind ausgeben.
String-Werte werden in " oder in ' eingeschlossen, durch Wechsel
zwischen " und ' können innere Zeichenketten gebildet werden.
Soll in einer Zeichenkette das gleiche Begrenzungszeichen
verwendet werden, muss \" oder \' kodiert werden.
*/
/* Hier steht ein mehrzeiliger Kommentar,
gleichzeitig ist damit das Skript
beendet */
?>
Peter Sobe
Internettechnologien
21
Einführung PHP (8)
Unterschied zwischen echo und print():
print() ist eine Funktion, die einen Funktionswert zurückgibt.
Ist print() erfolgreich, so wird der Wert 1 zurück gegeben, sonst 0.
Dieser Wert kann einer Variablen zugewiesen werden, und später
abgefragt werden. Ein Wert 0 wird zurück gegeben, wenn z.B. der
Nutzer die Verbindung zum Webserver unterbrochen hat.
PHP-Variable:
PHP-Variable werden durch einen Bezeichner gekennzeichnet, der
mit einem $-Zeichen beginnt, z.B. $test, $_zahl_1. Es gibt auch
reservierte Variable, wie z.B. $_POST.
Es wird unterschieden zwischen lokalen Variablen und globalen
Variablen.
Peter Sobe
Internettechnologien
22
Einführung PHP (9)
Lokale Variable
Lokale Variable gelten in dem Block, in dem sie benutzt
werden. Als Block gilt dabei ein Tag <?php …?> oder eine
Funktion, deren Körper in {…} eingeschlossen ist. Eine
Verbundanweisung, wie z.B. if ($x>0) {……} gilt nicht als Block.
globale Variable
Superglobale Variable, wie z.B. $_REQUEST gelten überall.
Wenn Variable, die in einem Block definiert sind, auch in
anderen Blöcken (innere Blöcke oder parallele Blöcke) gelten
sollen, müssen sie in diesen Blöcken als global gekennzeichnet
werden. Das geschieht, indem das Wort global vor die Variable
geschrieben wird:
z.B. global $zahl;
Peter Sobe
Internettechnologien
23
Einführung PHP (10)
dynamische Variable
Dynamische Variable sind Variable, deren Wert (als
Zeichenkette) der Name einer weiteren Variablen ist. Damit
besteht die Möglichkeit, quasi eine Adress-Ebene über die
Werte-Ebene zu legen. Die dynamischen Variablen sind eine
Art Zeiger auf weitere Werte, die die Variablen haben, deren
Namen als Wert der dynamischen Variablen vorhanden ist.
Der Substitutionsmechanismus wird ausgelöst, indem vor die
dynamische Variable noch $-Zeichen gesetzt wird, d.h. es
stehen dann zwei $-Zeichen nebeneinander.
Beispiel:
$Variable=“normaler Wert“; $dynVar=“Variable“;
echo $$dynVar;//es wird “normaler Wert“ ausgegeben!
Peter Sobe
Internettechnologien
24
PHP – Arbeit mit Variablen
Funktionen zur Arbeit mit Variablen (Auswahl)
isset($Variable)
Der Rückgabewert ist 1, falls die Variable schon angelegt wurde, sonst 0.
empty($Variable)
Der Rückgabewert ist 1, falls die Variable $Variable einen Wert 0 oder als Wert die
leere Zeichenkette besitzt, sonst 0.
unset($Variable)
Diese Funktion löscht die Variable $Variable.
gettype($Variable)
Der Rückgabewert ist eine Zeichenkette:
„integer“, falls die Variable $Variable eine ganze Zahl ist,
„string“, falls die Variable $Variable eine Zeichenkette ist,
„double“, falls die Variable $Variable eine Gleitkommazahl ist,
„array“, falls die Variable $Variable ein Feld (array) ist,
„object“, falls die Variable $Variable ein Objekt ist,
„unknown type“, falls die Variable einen Wert unbekannten Typs hat.
Peter Sobe
Internettechnologien
25
PHP - Konstanten
Konstante
Konstante werden im Skript direkt kodiert:
Beispiele:
-36, 1.4142, 234.5e-4, ″Wort″, ΄neu΄
Werden bestimmte Konstante im Script häufig benutzt, ist es
zweckmäßig, diese unter einem Namen zu vereinbaren:
define(″pi″, ″3.141593″);
Der vereinbarte Name wird ohne $-Zeichen benutzt. Den Wert
einer Konstanten kann durch Zuweisung nicht geändert
werden.
Es gibt einige vordefinierte Konstanten, wie PHP_VERSION,
PHP_OS, NULL, TRUE, FALSE usw.
Peter Sobe
Internettechnologien
26
PHP – Operatoren und Zuweisungen
PHP benutzt bis auf wenige Ausnahmen die gleichen Operatoren, mit der
gleichen Priorität wie die Sprache C (und damit wie JavaScript).
Das betrifft auch die Zuweisungen.
Operationen mit Zeichenketten
Ausnahme bilden hier die Zuweisungen von Zeichenketten, da hier im
Gegensatz zu C der Typ string existiert. Viele Operationen mit Zeichenketten werden aber auch wie in C über Standardfunktionen ausgeführt.
Wichtige String-Funktionen sind:
int strlen(string str); … gibt die Länge eines Strings zurück
int strcmp(string str1, string str2); … vergleicht zwei Strings,
Rückgabe 0 bei Gleichheit
int strpos (string haystack, string needle, int [offset]);
… sucht den Teilstring needle in haystack und
gibt Position innerhalb haystack zurück
string strrev (string str); … kehrt einen String um
string substr (string string, int pos, int [len]); …gibt eine Teilzeichenkette zurück
Peter Sobe
Internettechnologien
27
PHP – Operatoren und Zuweisungen
Zusammenketten einzelner Strings:
Durch den Punkt-Operator wird ein zweiter String an einen ersten
String angehangen.
$zielstring = $string1.$string2;
Beispiel:
$name=‘Max‘.‘Mustermann‘; // erzeugt MaxMustermann
Formatiertes Anhängen von Variablenwerten an Strings:
Variablenwerte werden in Strings konvertiert und an linksseitigen
String angehangen.
$outstring = "e=".e($anz) ."<br />Anzahl Iterationen: ".$anz;
e($anz) ist ein Funktionsaufruf, siehe Beispiel efunction.php
Peter Sobe
Internettechnologien
28
PHP – Operatoren und Zuweisungen
Operationen mit Datums- und Zeitwerten
Datum und Zeit sind keine zugelassenen Typen in PHP (auch
nicht in C). Praktisch wird aber häufig in Algorithmen die
Manipulation von solchen Werten benötigt. In PHP ist dazu eine
Reihe von Standardfunktionen vorhanden.
Wichtige Funktionen sind:
date(), jdmonthname(), jddayofweek(), getdate(), checkdate(),
mktime(), time(), gettimeofday().
Ausschnitt aus statement_date.php
<? echo "<br /><b>heutiges Datum auslesen und zerlegen</b><br />";
$d=getdate();
echo "<br />Wochentag: ".$d['weekday'];
echo "<br /><br />Datum: ".$d['mday'].".".$d['month'].".".$d['year'];
echo "<br /><br />Zeit: ".$d['hours'].".".$d['minutes']." Uhr";
?>
Peter Sobe
Internettechnologien
29
PHP – Steuerfluss
Zum imperativen Paradigma einer Programmiersprache
gehören unverzichtbar neben der Sequenz von Zuweisungen,
einige so genannte Kontrollstrukturen. Damit sind gemeint:





Alternativen (if-Anweisungen)
Mehrfachalternativen (switch-Anweisungen)
kopfgesteuerte Zyklen (while-Anweisungen)
fußgesteuerte Zyklen (do-while-Anweisungen)
Zählzyklen (for-Anweisungen)
Diese Kontrollstrukturen sind syntaktisch und semantisch
vollkommen identisch zur Sprache C in PHP übernommen
worden. Zusätzlich gibt es noch einen for-each-Zyklus.
Hier deshalb nur kurz die Syntax der einzelnen
Kontrollstrukturen…
Peter Sobe
Internettechnologien
30
PHP – Steuerfluss: Alternativen
if (Bedingung) true-Anweisung;
else false-Anweisung;
Der else-Teil kann fehlen. Statt einzelner Anweisungen können auch
Anweisungsblöcke, eingefaßt in {} durch if-else gesteuert werden.
Beispiele: statement_else.php, statement_endif.php
Mehrfachalternativen:
switch(Fallvariable)
{ case Wert1: Anweisungen-Fall-1;
break;
case Wert2: Anweisungen-Fall-2;
break;
…
case Wertn: Anweisungen-Fall-n;
break;
default:
Anweisungen-Fall-sonst;
}
Peter Sobe
Bei switch-case werden mehrere
Anweisungen je Fall nicht in {}
eingefaßt.
Internettechnologien
31
PHP – Steuerfluss: Zyklen (1)
kopfgesteuerte Zyklen (while-Anweisungen)
while (Bedingung)
{ Anweisungen-Zyklus; }
fußgesteuerte Zyklen (do-while-Anweisungen)
do
{ Anweisungen-Zyklus;
} while (Bedingung)
Beispiel:
Peter Sobe
<?php
$counter = 0;
$test = 6;
do {
echo "Aktueller Z&auml;hler: $counter<br>";
$counter++;
} while ($counter <= $test)
?>
Internettechnologien
32
PHP – Steuerfluss: Zyklen (2)
Zählzyklen (for-Anweisungen)
for (LV=aw; Lauf-Bedingung; LV-verändern)
{
Anweisungen-Zyklus;
}
Mit der Lauf-Bedingung wird der Abbruch des Zyklus festgestellt
(Endwert erreicht?). Mit LV-verändern wird die Schrittweite für LV
realisiert.
Peter Sobe
Internettechnologien
33
PHP – Steuerfluss: Zyklen (3)
for-each-Zyklen
foreach (Feldname as Variable)
{
Anweisungen-Zyklus;
}
Mit dieser Zyklusanweisung können z.B. bequem Feldelemente
aus einem array ausgelesen werden, ohne dass deren Anzahl
bekannt ist.
Beispiel: statement_foreach.php
Peter Sobe
Internettechnologien
34
PHP – Felder (1)
PHP erlaubt Felder (Arrays) als gereihte Elemente, auf deren
Werte über einen Index oder über einen Schlüssel (Namen)
zugegriffen werden kann.
 Variante 1: indizierte oder numerische Felder –Zugriff auf
Elemente über Index
 Variante 2: assoziative Felder – Zugriff auf Elemente über
Variableninhalt
Dem PHP-Variablenkonzept folgend, muss ein Feld nicht
deklariert werden, sondern das Feld entsteht dynamisch
durch Zuweisungen zur Laufzeit.
Abweichend zu üblichen Programmiersprachen müssen die
Elemente von PHP-Feldern nicht den gleichen Datentyp
besitzen.
Peter Sobe
Internettechnologien
35
PHP – Felder (2)
Indizierte Felder:
Zuweisungen an Elemente können wie folgt kodiert werden:
Beispiel: $Person[]=″Lehmann″;
$Person[]=″Kurz″;
$Person[]=″Schulz″;
$Person[]=″Bernhardt″;
Die Reihenfolge der Zuweisungen legt dann den Index fest. In die
Indexklammern hätte man auch den Index von 0 beginnend eintragen
können.
Beim späteren Zugriff auf die Werte der Feldelemente muss aber der
Index angegeben werden.
Eine weitere Möglichkeit der Zuweisung von Werten besteht mit der
array-Funktion:
Beispiel: $Person=array(″Lehmann″, ″Kurz″,″Schulz″,″Bernhardt″);
Peter Sobe
Internettechnologien
36
PHP – Assoziative Felder (1)
Die Zuweisungen an Elemente können folgendermaßen kodiert
werden:
$Person[″Direktor″]=″Lehmann″;
$Person[″Abteilungsleiter″]=″Kurz″;
$Person[″Programmierer″]=″Schulz″;
$Person[″Verkäufer″]=″Bernhardt″;
Anstelle des Index wird ein Schlüssel (key) angegeben und
danach der Wert (value) des Feldelementes.
Beim späteren Zugriff auf die Werte der Feldelemente muss der
Schlüssel angegeben werden.
Peter Sobe
Internettechnologien
37
PHP - Assoziative Felder (2)
Eine weitere Möglichkeit der Zuweisung von Werten besteht mit
der array-Funktion, hier aber unter Angabe der Schlüssel-WertPaare.
Beispiel:
$Person=array(″Direktor″=> ″Lehmann″,
″Abteilungsleiter″=>″Kurz″,
″Programmierer″=>″Schulz″,
″Verkäufer″=>″Bernhardt″);
Beispiele: array_simple.php, array_assoziative.php
Peter Sobe
Internettechnologien
38
PHP – Zugriff auf Feldelemente
Beim späteren Zugriff auf die Werte der Feldelemente muss
entweder
 der Index (bei indizierten Feldern)
 oder der Schlüssel (bei assoziativen Feldern)
angegeben werden.
Eine andere Möglichkeit des Zugriffs besteht über die
Anwendung der each()-Funktion.
Beispiel:
while ($Jeder=each($Person))
echo ″<br />″.$Jeder[″value″].″ arbeitet als ″.$Jeder[″key″];
Peter Sobe
Internettechnologien
39
PHP – mehrdimensionale Felder
Die Zuweisungen an Elemente können folgendermaßen kodiert
werden:
$mitarbeiter = array("M1" => array("Clemens", "Krause"),
"M2" => array("Janine","Bünning"),
"M3" => array("Carolin","Scholz"),
"M4" => array("Carolin","Schröder") );
D.h. der Mitarbeiter M1 hat zwei Elemente (Spalten). Das erste
Element (Index 0) ist der Vorname und das zweite der Nachname.
Der Zugriff wäre damit:
echo "<br />Vorname=".$mitarbeiter[“M1“][0];
echo "<br />Nachname=".$mitarbeiter[“M1“][1];
Beispiel: array_multi.php
Peter Sobe
Internettechnologien
40
PHP – Formatierte Ausgabe (1)
Mit der Funktion printf() können analog zur Programmiersprache C
formatierte Zeichenketten und Variableninhalte geformt werden.
Syntax:
printf(String formatstring, mixed [args] …);
Im Formatstring kann ein konstanter String angegeben werden, der
mit einer variablen Anzahl von Umwandlungsangaben
angereichert ist. Für jede Umwandlungsangabe wird der Wert einer
Variablen eingesetzt. Die Variablen sind als weitere Argumente
(args) in der Reihenfolge ihrer Umwandlungsangaben angegeben.
Beispiel:
printf(“Seit dem letzten Aufruf der Webseite sind %d Tage vergangen\n“,
$delta_tage);
Umwandlungsangabe
Peter Sobe
Variable
Internettechnologien
41
PHP – Formatierte Ausgabe (2)
Beispiel:
printf(“<p> Das Datum ist: %02d. %02d. %04d </p>\n“,
$tag,$mon,$jahr);
Die Umwandlungsangaben sind hier %02d, %02d und %04d.
Am Platz von %02d, %02d, %04d werden die Werte von tag, mon,
jahr als 2- bzw. 4-stellige Dezimalzahlen ausgebeben. Im Beispiel
werden führende Nullen vorangestellt (wegen 02d anstatt 2d).
Ausgabe:
Das Datum ist: 24. 02. 2011
Peter Sobe
Internettechnologien
42
PHP – Formatierte Ausgabe (3)
printf Umwandlungen:
Umwandlungszeichen
Argument; Umwandlung in
d,i
int; dezimal mit Vorzeichen.
o
int; oktal ohne Vorzeichen (ohne führende Null).
x,X
int; hexadezimal ohne Vorzeichen (ohne führendes 0x oder 0X)
u
int; dezimal ohne Vorzeichen.
c
int; int einzelnes Zeichen, nach Umwandlung in unsigned char.
s
char*; aus einer Zeichenkette werden Zeichen ausgegeben
f
double; dezimal als [-]mmm.ddd, wobei die Genauigkeit die Anzahl der
d festlegt. Voreinstellung ist 6; bei 0 entfällt der Dezimalpunkt.
e,E
double; dezimal als [-]m.dddddde±xx oder [-]m.ddddddE±xx,
wobei die Genauigkeit die Anzahl der d festlegt.
Voreinstellung ist 6; bei 0 entfällt der Dezimalpunkt.
g,G
double; %e oder %E wird verwendet, wenn der Exponent kleiner als -4
oder nicht kleiner als die Genauigkeit ist; sonst wird %f benutzt.
Null und Dezimalpunkt am Ende werden nicht ausgegeben.
Peter Sobe
Internettechnologien
43
PHP – Funktionen (1)
PHP benutzt im Wesentlichen das Funktionskonzept der Sprache C.
 Häufig wiederkehrende Anweisungsfolgen können als Funktion
zusammengefasst werden und unter dem Funktionsnamen aufgerufen
werden.
 Es wird unterschieden zwischen Definition und Aufruf der Funktion.
 Funktionen sind parametrisierbar (Call-by-Value- und Call-byReference-Parameter sind möglich)
 Ein Rückkehrwert kann (muss nicht) erzeugt werden.
 Im Gegensatz zu allen derzeit genutzten Programmiersprachen lässt
PHP Seiteneffekte bei Funktionen zu.
Peter Sobe
Internettechnologien
44
PHP – Funktionen (2)
Da PHP kein explizites Typkonzept hat, wird auch in der Kopfzeile
der Funktionsdefinition anstelle des Typs des Rückkehrwertes nur
function geschrieben. Durch eine innere return-Anweisung liegt
dann implizit der Typ fest. Damit ist der syntaktische Rahmen wie
folgt zu kodieren:
Definition:
function fname($par1, $par2,…,&$p1,&$p2,…)
{ lokale Deklarationen;
Anweisungen;
[return Ausdruck;]
Call-by}
Call-by-Value
Reference
Aufruf:
[$wert =] fname($pa1,$pa2, …,$po1,$po2);
Peter Sobe
Internettechnologien
45
PHP – Funktionen (3)
Eine Funktion bildet einen eigenen Gültigkeitsbereich für
Variable, die im Teil lokale Deklarationen angegeben sind oder
Parameter darstellen.
In der Kopfzeile sind die Parameter angegeben, wobei die
Parameterliste auch leer sein kann. Sind Parameter über ein
vorangestelltes & gekennzeichnet, so sind das
Ergebnisparameter (call by reference).
Die return-Anweisung kann auch fehlen, dann gibt es keinen
Rückgabewert.
Es können auch rekursive Funktionen kodiert werden.
Peter Sobe
Internettechnologien
46
PHP – Funktionen (4)
PHP-Beispiel einer Funktion:
Funktion e mit einem Referenzparameter
function e(&$a)
{$s=1.0; $p=1.0; $f=1.0; $a=0;$i=1;
while ($p>0.0000001)
{ $f=$f*$i; $p=1.0/$f; $s=$s+$p;
$i=$i+1; $a=$a+1;
}
return $s;
}
e
 1
 i!
i 0
Aufruf der Funktion e mit einem Argument:
echo "e=".e($anz) ."<br />Anzahl Iterationen: ".$anz;
Peter Sobe
Internettechnologien
47
PHP – Funktionen, Globale Variablen
Werden in einer Funktion globale Variablen benutzt, so sind diese
als global zu deklarieren.
Beispiel:
$xmitte=300;
$ymitte=300;
$radius=150;
function kreispunkt($winkel, &$xpos, &$ypos)
{
global $xmitte;
global $ymitte;
global $radius;
$xpos = $xmitte + sin($winkel) * $radius;
$ypos = $ymitte - cos($winkel) * $radius;
Die Funktion kreispunkt ()
berechnet die
Koordinaten eines
Punktes auf einem Kreis,
der einem gegebenen
Winkel entspricht. Die
Kreisparameter werden
als globale Variablen
übernommen.
winkel
}
Peter Sobe
Internettechnologien
48
PHP – Formularverarbeitung (1)
Die superglobalen Variablen $_GET bzw. $_POST enthalten als
Feld Informationen, die auf der Clientseite in Formularelemente,
wie INPUT-Elemente, RADIO-, CHECK-Felder usw. eingetragen
wurden und serverseitig abrufbar sind.
Die Namen der superglobalen Variablen weisen dabei auf die
Übertragungsart hin. Ist man nicht sicher, welche Methode, GET
oder POST verwendet wurde, sollte anstelle dieser, die
superglobale Variable $_REQUEST verwendet werden.
Die superglobalen Variablen $_GET, $_POST, $_COOKIE,
$_SERVER, $_FILES, $_ENV, $_REQUEST sind assoziative
Felder.
Peter Sobe
Internettechnologien
49
PHP – Formularverarbeitung (2)
Formular in PHP
<FORM method="POST" action=“auswertung.php" >
<INPUT NAME="fname" TYPE="text" VALUE=“”>
<INPUT NAME="Name" TYPE="text" VALUE="">
<INPUT NAME="sex" TYPE="radio" VALUE="male" CHECKED>
<INPUT NAME="sex" TYPE="radio" VALUE="femal">
<INPUT NAME="user" TYPE="text" VALUE="">
<INPUT NAME="psw" TYPE="password" VALUE="">
</FORM>
auswertung.php
…
$fn=$_POST['fname'] ;
$n=$_POST['Name'] ;
$s=$_POST['sex'] ;
$u=$_POST['user'] ;
$p=$_POST['psw'] ;
…
Peter Sobe
Internettechnologien
50
PHP – Formularverarbeitung (3)
Im assoziativen Feld muss der Name des betreffenden
Formularelementes (Wert des Name-Attributes) als Index
angegeben werden. Angenommen es existiert im Formular ein
Inputfeld:
<INPUT type=″text″ name=″Vorname″ />
so kann im Skript mit dem PHP-Ausdruck $_POST['Vorname']
der eingetragene Wert übernommen werden.
Sollte die Herkunft des Wertes über GET, POST oder COOKIE
keine Rolle spielen, ist zweckmäßigerweise die superglobale
Variable $_REQUEST für die Übernahme zu verwenden.
Ob ein Werteeintrag erfolgte, kann mit der PHP-Funktion isset()
getestet werden.
Beispiel: $_REQUEST['Vorname']
Peter Sobe
Internettechnologien
51
PHP – Formularverarbeitung (4)
Upload von Dateien durch Formulare:
Formular auf Webseite:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="datei"><br>
<input type="submit" value="Hochladen">
</form>
PHP-Skript, das per HTTP-POST-Operation aufgerufen wird:
move_uploaded_file($_FILES['datei']['tmp_name'], "uploaddatei.txt");
Der Dateiinhalt und die Angaben zur Datei werden automatisch im Body
des HTTP-Requests transportiert und können durch das PHP-Skript in der
Variable $_FILES abgefragt werden. Die Datei wird als temporäre Datei auf
Serverseite abgelegt. Den Namen der temporären Datei fragt man mit
$_FILES['datei']['tmp_name'] ab. Der Bezeichner ‘datei’ stellt die Beziehung
zu dem im Formular angegebenen Identifikator her.
Peter Sobe
Internettechnologien
52
PHP – Dateiarbeit (1)
Das Dateikonzept von PHP hat auch große Ähnlichkeit mit dem
Dateikonzept der Sprache C. Die meisten Funktionen zum
Öffnen, zum Schließen, zum Lesen und zum Schreiben sind
identisch.
 Es stehen mehr als 50 Funktionen für Dateiarbeit bereit.
Hier werden nur die wichtigsten Funktionen behandelt.
 Unterschiede bestehen gegenüber Unix bei der Arbeit mit
Verzeichnissen.
 Durch PHP kann auf Serverseite auch auf Pfade zugegriffen
werden kann, die außerhalb des Publikationsverzeichnisses
des Webservers liegen.
Peter Sobe
Internettechnologien
53
PHP – Dateiarbeit (2)
Das Schema der Arbeit mit Dateien besteht aus folgenden
Schritten:
 Das Öffnen einer Datei erfolgt mit fopen(). Es wird ein Handle
(Adresse) angelegt; evtl. wird eine nicht existierende Datei zum
Schreiben angelegt; wenn Fehler auftreten werden diese
behandelt
 Treten keine Fehler auf, werden zum Lesen geöffnete Dateien
bis zur Erkennung des Datei-Ende (EOF) gelesen, z.B. mit
fread(); zum Schreiben geöffnete Dateien werden solange wie
notwendig geschrieben, z.B. mit fwrite()
 Das Schließen einer Datei erfolgt mit fclose()
Vor dem Öffnen der Datei kann geprüft werden, ob die Datei
existiert oder es können auch Operationen mit dem Verzeichnis
vorgenommen werden.
Peter Sobe
Internettechnologien
54
PHP – Dateiarbeit (3)
file_exists()
Eine Datei kann mit dieser Funktion auf Vorhandensein geprüft
werden. Als Argument ist der Pfad einschließlich Dateinamen
anzugeben. Im Erfolgsfall gibt die Funktion true zurück.
is_file()
Eine Datei kann mit dieser Funktion auf die Eigenschaft reguläre
Datei geprüft werden, also z.B. kein Verzeichnis. Als Argument ist
der Pfad einschließlich Dateinamen anzugeben. Im Erfolgsfall gibt
die Funktion true zurück.
is_readable() / is_writeable()
Eine Datei kann mit diesen Funktionen auf Vorhandensein des
Leserechts /Schreibrechts geprüft werden. Als Argument ist der
Pfad einschließlich Dateinamen anzugeben. Im Erfolgsfall gibt die
Funktion true zurück.
Beispiel: file_check.php
Peter Sobe
Internettechnologien
55
PHP – Dateiarbeit (4)
Eine Formatierte Datei- Eingabe wird durch die PHP-Funktionen
fscanf() erreicht:
mixed fscanf(ressorce handle, string formatstring [, string var ] )
Die gelesenen Variablen können dem zurückgegebenen Array oder
den Parametern nach formatstring entnommen werden.
Beispiel:
<?php
$handle= fopen(“meinedatei.txt“,“r“);
while ( $info = fscanf($handle, “%s \t %s \n“, ))
{ list($wert1, $wert2)= $info;
// verarbeite wert1 und wert2
}
fclose ($handle);
?>
Peter Sobe
Internettechnologien
56
PHP – Dateiarbeit (5)
Funktionen zum Datei-Management:
copy, rename, unlink (Löschen)
Verzeichnis-Zugriff:
mkdir, chdir, rmdir, opendir, readdir, rewinddir
Schnittstelle und Verhalten der Funktionen weitestgehend
nach Clib-Schnittstelle (C- Standardbibliothek)
Programmausschnitt zum Auflisten eines Verzeichnisses:
$verzeichisname = "/";
$verzeichnis = opendir($verzeichnisname);
while($dateiname = readdir($verzeichnis))
printf("%s <br/>\n",$dateiname);
closedir($verzeichnis);
Peter Sobe
Internettechnologien
57
PHP – Dateiarbeit (6)
Objektorientierte Variante der Verzeichnisarbeit mit
Benutzung der ´dir-Klasse:
$verzeichnis = dir("/");
while($dateiname=verzeichnis->read())
printf("%s <br/>\n",$dateiname);
$verzeichnis->close($verzeichnis);
Peter Sobe
Internettechnologien
58