Datenverarbeitungstechnik 2013/14

Werbung
Datenverarbeitungstechnik 2013/14
Serverbetriebssysteme (Grundlagen)
Multitasking, Scheduler
Memory Management
Windows (Microsoft-Server)
Windows –Domäne
Active Directory
Rechtesystem und User
Administration objektorientiert mit VB-Skript
Internettechnologien
Apache Server
Interaktives HTML
PHP
Datenbanken
SQL
Entwurf, Praxis
dynamische Websites
Kommunikation in Industrieanlagen
Webservices, Middleware, XML
Security
Dipl.-Ing. Reiner Doll, Technikerschule München ([email protected])
1
Zur Themenauswahl :
Das Fach Datenverarbeitungstechnik im Profil “Automation und IT“ soll in enger
Zusammenarbeit mit dem Fach Automatisierungstechnik die Grundlagen der Anwendung ITtechnischer Werkzeuge in der Industrie- und Anlagentechnik vermitteln.
Es wird bewußt bei jedem Thema nur der erste Schritt, der Einstieg, vermittelt.
Darauf basierend kann bei Bedarf dann Detailwissen für die Praxis leicht erworben werden.
Serverbetriebssysteme :
Moderne Leitrechner und in jüngster Zeit auch SPS gewinnen rasant an Rechenleistung.
Hier werden Multitasking-Betriebssysteme eingeführt, die in industrieller Anwendung nicht
unkritisch sind. Man sollte die Grundlagen kennen, um in der Diskussion und beim Lesen von
technischen Unterlagen mithalten zu können.
Windows :
Die Rechentechnik in der MES- und ERP- Ebene von Industrieanlagen ist heute sehr eindeutig
vom Betriebssystem Windows dominiert. Grundliegende Kenntnisse der Arbeitsweise und der
Administration von Windows-Servern gehören zum Handwerkszeug in der Industrie-IT.
Internettechnologien :
Bedienung und Wartung von Industrieanlagen wird heute zunehmend in Weboberflächen
durchgeführt. Moderne SPS nutzen integrierte Webserver zur Kommunikation. Daher sind
grundliegende Fertigkeiten in der Administration von Webservern und im technischen
Gestalten von Webinhalten nötig.
Datenbanken :
In vernetzten Industrieanlagen spielen SQL-Datenbanken als Kern der ERP-Systeme und als
Informationspool für die gesamte Anlagentechnik eine zentrale Rolle. Der Techniker muß
einen Einblick in Aufbau und Arbeitsweise dieser Systeme haben und die Basisbedienung
beherrschen.
Kommunikation in Industrieanlagen :
In vertikal vernetzten Anlagen greift die Prozessebene (meist SPS) heute direkt auf
Datenbestände in der MES – oder ERP-Ebene zu. Die MES-Ebene und die ERP-Systeme
kommunizieren untereinander und über das Internet mit der Zulieferkette (supply chain).
Hier haben moderne IT-Protokolle die klassischen proprietären Sprachen (EDI..) verdrängt.
Kommuniziert wird mit Webservices, das Datenformat ist immer XML.
Techniker müssen diese Formate kennen, sowie rechnergestützt lesen und senden können.
2
Serverbetriebssysteme (Grundlagen)
Das BS muß Multitasking ausführen :
Alle Prozesse, die im Zeitmultiplex auf dem Prozessor laufen, müssen gestartet, eine Weile
ausgeführt, und dann wieder zugunsten des nächsten Prozesses gestoppt werden.
Das BS muß den RAM-Speicher verwalten :
Die Prozesse teilen sich den installierten RAM (heute einige GB). Daten müssen so verwaltet
werden, daß alle Prozesse mit dem Speicher auskommen.
Das BS muß die Prozesskommunikation ausführen :
Zu einer Zeit läuft immer nur ein Prozess. Will er mit einem anderen kommunizieren, müssen
hierfür Mechanismen (Serverdienste) bereitgestellt werden.
Diese Aufgaben und noch eine ganze Reihe Weiterer führen bei heute üblichen modularen
Betriebssystemen spezielle Module aus (z.b. der Memory Manager). Die Kommunikation der
Module untereinander und das grundliegende Multitasking erledigt der BS-Kern, der
sogenannte Micro-Kernel :
früher : monolithisches BS
Alle Funktionen des BS
in einem Programm,
dem Kernel
heute : modulares BS
Modul
Modul
Modul
Micro-Kernel :
Kommunikation und Multitasking
3
Prozessor als Betriebssystembasis
Protected-Mode (Intel 1982) :
Schutzringe für verschiedene Programmklassen :
Ring 3 : Applikationsprogramme
Ring 2 : Betriebssystem-Erweiterungen
Ring 1 : Systemprogramme
Ring 0 : Betriebssysgtemkern (Kernel)
In Betriebsart 0 (Ring 0) laufen alle Befehle, auch systemkritische, wie z.b. HLT, mit
dem der Prozessor angehalten wird. Ein Programmfehler kann hier das ganze System
abstürzen lassen.
Nach außen sind immer weniger Befehle zur Verfügung, bis in Ring 3 keine systemkritischen
Befehle mehr vorhanden sind.
Jedes Programm trägt, vom System vergeben, eine Kennzeichnung (CPL : current privilege
level) , die bestimmt, in welchem Ring es laufen darf.
Weiter regelt ein Mechanismus im protected mode, welche Speicherbereiche im RAM von
einem Programm angesprochen werden dürfen. Dies bewirkt am Ende z.B., daß ein
Userprogramm nicht Daten eines anderen Userprogramms überschreiben kann.
4
Betriebssystem auf protected-mode Prozessoren : Windows Server
Ring 3
Ring 0
Beispiele :
Microkernel :
HAL :
c:\windows\system32\kernel32.dll
c:\windows\system32\hal.dll
5
Multitasking :
Multitasking bedeutet, daß auf nur einem Prozessor mehrere Programme „quasi“ gleichzeitig
ausgeführt werden. Das geht nur durch Zeitmultiplex, welches so schnell sein muß, daß der
Anwender (ein Mensch oder auch ein technischer Prozess) es als „gleichzeitig“ empfindet.
Programm / Task :
Ein Programm ist eine Vorschrift, wie ein Ablauf auszuführen ist.
Eine Task ist ein Programmteil, und dazu alle nötige Info, um den Ablauf jederzeit stoppen und
wieder weiter starten zu können.
Beispiel :
Sie backen einen Kuchen. Dazu haben sie ein Rezept, das sie stets von Anfang bis Ende
ausführen. => Programm !
Sie backen einen Kuchen, dazwischen kommt aber die Freundin und will reden. Das hat höhere
Priorität, also muß der Kuchen unterbrochen werden.
Sie müssen sich jetzt neben dem Rezept aufschreiben, wie weit sie waren, was alles schon drin
ist, usw. => Task !
Eine Task kann verschiedene Zustände haben :
Sleeping :
wartet
Running :
läuft gerade
Blocked :
nicht lauffähig
(z.b. Eier aus)
6
Varianten von Multitasking :
Warum Sie das wissen müssen :
Ausschnitt aus “SPS - Zeitschrift für Automatisierungstechnik“ :
Das Betriebssystem von Sigmatek unterstützt und nutzt sowohl präemptive Tasks (….) als auch
kooperative Tasks (…). Visualisierung und Steuerungsprogramm können so auf einem Prozessor laufen.
Das Betriebssystem behält die Kontrolle über die abzuarbeitenden Aufgaben (präemptives
Multitasking), innerhalb einer Taskpriorität wird kooperatives Multitasking angewendet.
kooperatives Multitasking :
Ziel :
Auf eher schwacher Hardware sollen die Prozesse möglichst performant laufen.
Systemstabilität hat nicht die oberste Priorität, ein Absturz ist keine Katastrophe.
Lösung :
Prozesse laufen so lange, bis sie die CPU “feiwillig“ wieder hergeben, z.b. bis sie in blocked
gehen (dann können sie sowieso nicht weiterrechnen und ein anderer wird gestartet).
Problem :
Wenn ein Prozess die CPU nicht mehr freigibt (z.b. weil er in einer Endlosschleife läuft), steht das
ganze System (incl. dem Betriebssystem) !!
I/O-Anforderung
Px
Dispatcher : stoppt Px -> blocked
Py
Scheduler : wählt nächste Task(z.B. Pz) aus
(nach festgelegter Scheduling-Strategie)
Dispatcher : startet Pz -> running
(Im Hintergrund wird Px irgendwann wieder von blocked
auf sleeping gehen, wenn I/O fertig)
Pz
7
präemptives Multitasking :
Ziel :
Maximale Systemstabilität. Nötige Performance wird durch entsprechende Hardware erreicht.
Lösung :
Anwender-Prozesse dürfen nicht am Multitasking beteiligt werden. Ausschließlich
das Betriebssystem selber entscheidet, wann ein Taskwechsel erfolgt.
Ein stehender Prozess gefährdet dann das Gesamtsysgtem nicht.
Problem :
Macht das System langsamer (oder teurer : schnelle Hardware)
Zeitscheibendarstellung :
Pc
Pb
Quantum Ƭ
Pd
Pa
CPU
Pe
Die Zeitscheibe dreht sich rechts rum.
Prozess Pa hat die CPU gerade, solange bis das Quantum (z.b. 20ms) vorbei ist.
Dann sichert der Dispatcher Pa und lädt Pb, dann startet er Pb.
Die Anordnung der Prozesse auf der Zeitscheibe bestimmt der Scheduler.
Langes Quantum : Rechenleistung steigt (weniger Verluste durch Dispatching)
Kurzes Quantum : “Gleichzeitigkeit“ wird besser, Anwender “fühlt“ keine Verzögerung
8
deterministisches Multitasking :
Alle bisher beschriebenen Verfahren sind in Industieumgebungen problematisch, weil sie,
anders als z.b. klassiche SPS-Betriebssysteme, keine Berechenbarkeit der Reaktionszeit bieten.
Diese Systeme sind also nicht deterministisch.
Als deterministische Alternativen werden z.b. für aktuelle Windows-Systeme von Drittherstellern
Erweiterungen angeboten. Der Scheduler von Windows wird dann ausgetauscht.
„Umlaufende“ Echtzeitverfahren :
Im Prinzip wird das Scheduling im Vorfeld geplant. Entweder läßt man Programmteile
zeitgesteuert nach einer vorgeplanten Reihenfolge immer komplett durchlaufen
(Non-Preemptive Realtime Multitasking, das machen kleine Controllersysteme häufig, zum
Beispiel der Scheduler des tsmCopters).
Oder man plant das oben beschriebene präemptive Verfahren (Preemptive Realtime
Multitasking) so voraus, daß sowohl die Prozessreihenfolge als auch die nötigen Quanten
geplant ablaufen. Das machen größere Prozessrechner üblicherweise.
„Ereignisgesteuerte“ Echtzeitverfahren :
Ein kompliziertes Thema. Im Prinzip ein präemptives Scheduling, aber hier werden die Tasks je
nach zeitlichem Zustand (wann kommt z.b. für die Task X wieder ein Meßwert, den sie
verarbeiten muß ?) dynamisch mit Prioritäten versehen.
Das Ganze wieder vorausgeplant, und rechnerisch nachgewiesen, daß zu jeder Zeit
jede zeitliche Anforderung erfüllt werden kann.
Beispiel : RMS (http://de.wikipedia.org/wiki/Rate_Monotonic_Scheduling)
In realen Systemen, z.b. in der modernen SPS-Technik, werden alle diese Verfahren eingesetzt.
Viele moderne SPS können mehrere Scheduling-Verfahren ausführen, sogar gleichzeitig
(siehe Zitat am Anfang des Kapitels).
9
Multitasking in Windows-Serverbetriebssystemen :
Seit Windows NT setzt Microsoft präemptives Multitasking ein. Vorher war eher das
Systemziel optimale Rechenleistung , also kooperatives Multitasking besser (Heimcomputer ..)
Scheduler mit 15 Prioritätsstufen :
P15
P14
P13
Tx
Ty
Tz
P1
Tk
Scheduling-Strategie (vereinfacht) :
- wähle oberste nicht leere Prioritätsstufe, führe deren Tasks immmer der Reihe nach aus
- wenn eine Task ihr Quatum voll ausrechnet, kommt sie eine Stufe tiefer in Priorität
- wenn eine Task nach blocked ging, kommt sie nach Beenden der I/O in die höchste Priorität
- in Priorität 15 ist Ƭ = 20ms, es wird nach unten immer länger, bis Ƭ = 120ms in Priorität 1
10
Probleme durch Multitasking :
Leider bringt der Betrieb eines Rechners (oder einer SPS !)) in Multitasking nicht nur Vorteile,
sondern auch Schwierigkeiten mit sich. So können fehlerfreie Programme sporadisch falsche
Ergebnisse produzieren, Prozesse können
können sich sogar gegenseitig blockieren.
1. Deadlock :
Oder etwas technischer :
Prozesse A und B wollen Daten von einer Platte zur anderen kopieren.
Prozess A will HD1->HD2,
>HD2, Prozess B andersrum.
Die Medien werden vor dem Zugriff mit einem Lock-Bit
Lock
reserviert.
11
Programmablauf beider Prozesse :
Reserviere Quell-HD
Reserviere Ziel-HD
Lies Daten von Quelle
Schreib Daten in Ziel
Gib Ziel-HD frei
Gib Quell-HD frei
Im Multitasking kann jetzt folgendes passieren:
Prozess A :
Prozess B :
Reserviere Quell-HD
(HD1 ist jetzt für A reserviert)
Reserviere Quell-HD
Quantum A ist zufällig hier zu
(HD2 ist jetzt für B reserviert)
Ende. Scheduler wählt B
Reserviere Ziel-HD
Hier geht’s nicht weiter, B
wartet auf Freigabe von HD1
Reserviere Ziel-HD
Damit ist nun auch hier
Schluß. A wartet auf Freigabe
von HD 2 !
Quantum B ist zu Ende.
Scheduler wählt irgendwann
wieder A
Beide Prozesse stehen, das nennt man Deadlock („tödliche Umarmung“).
12
2. Race condition :
Zwei Prozesse in einer Industrieanlage erhöhen den Wert eines gemeinsamen Zählers (z.b. 2
Stanzen arbeiten in den gleichen Behälter). Der Zählvorgang ist in beiden so programmiert :
Lies Zählerwert n
Erhöhe n um 1
Schreib n in Zähler
Im Multitasking kann jetzt folgendes passieren :
n = 18 …. nach den beiden Additionen steht aber nicht 20 sondern 19 im Zähler !
Prozess A :
Prozess B :
Lies Zählerwert n (18)
Erhöhe n um 1 (19)
Quantum A ist zufällig hier zu
Ende. Scheduler wählt B
Lies Zählerwert n (18)
Erhöhe n um 1 (19)
Schreib n in Zähler (n=19)
Schreib n in Zähler (n=19)
Quantum B ist zu Ende.
Scheduler wählt irgendwann
wieder A
Korrekte Programme führen durch ungünstiges Unterbrechen zu falschen Resultaten !
Zum Weiterlesen ganz witzig : Das Problem der 5 Philosophen (Djikstra, rund 1970)
http://de.wikipedia.org/wiki/Philosophenproblem
13
Lösung dieser Multitasking-Probleme :
Diese Probleme sind nicht neu.
Im Eisenbahnwesen kann es vorkommen, daß 2 Züge von 2 Seiten Seiten den selben
eingleisigen Steckenabschnitt befahren wollen. Dazu hat man das Semaphor erfunden. Dieses
Signal wird gesetzt, sobald ein Zug den „kritischen Abschnitt“ befährt, der aus der Weiche zum
Tunnelabschnitt, dem Tunnel selber, sowie der Weiche nach dem Tunnelabschnitt besteht.
Erst wenn er komplett durch ist, gibt das Semaphor den Streckenabschnitt wieder frei.
In der Informatik benutzt man dazu spezielle Variablen, die man auch Sempaphore, oder
wenn sie nur 2 Zustände haben können, Mutexe (von : mutual exclusion), nennt.
Wichtig ist hierbei, in einem Prozess, der mit anderen konkurrieren kann (siehe oben), den
kritischen Abschnitt zu isolieren, und dann mit dem Mutex abzusichern.
In unserem ersten Beispiel sind A und B dann so zu programmieren:
Nimm MUTEX
Reserviere Quell-HD
Critical section
Reserviere Ziel-HD
Gib MUTEX frei
Wenn Prozess A den gemeinsamen MUTEX nimmt, kann Prozess B seine erste Platte nicht
mehr reservieren -> kein Deadlock mehr möglich !
Hierfür stehen auf Betriebssystemebene Funktionen bereit, die Systemprogrammierer nutzen
können (Windows-Funktion : CreateMutex). Manchmal braucht man das auch in Anwenderprogrammen, dann muß man diese Variable halt selber definieren und den Zugangsschutz
selber programmieren …
Verständnisfrage : wieso blockiert man mit dem Mutex nicht einfach die Unterbrechung
der critical section durch das Multitasking ??
14
Graphische Beschreibung der Funktion nebenläufiger Systeme : Petrinetz
Carl Adam Petri (geb. 12. Juli 1926), deutscher Mathematiker
„Ein Petri-Netz ist ein mathematisches Modell von nebenläufigen Systemen. Es ist eine
formale Methode der Modellierung von Systemen bzw. Transformationsprozessen.“
(Quelle : Wikipedia, siehe auch Automatentheorie und Moore-Automaten)
Es besteht aus Zuständen („state“, diese sind in der Hardware durch die Ausgänge
speichernder Bauteile definert) und Zustandsübergängen („transition“). Eine Marke (Punkt)
definiert, ob ein Zustand aktiv oder nicht aktiv ist.
Funktionsregel :
Wenn alle Zustände vor einer Transition akitv sind, schaltet diese. Die Marke wandert dann
auf die nachfolgenden Zustände :
Zeitpunkt 1 :
Zeitpunkt 2 :
15
Im Petrinetz dargestellt 2 Prozesse, die um gemeinsame Betriebsmittel konkurrieren :
(Die beiden Betriebsmittel BM könnten z.b. 2 Festplatten sein, siehe oben)
Prozess 1
Prozess 2
BM1
Selber spielen ?
BM2
-> http://olli.informatik.uni-oldenburg.de/PetriEdiSim/
16
Start : (beide BM sind bereit)
Prozess1 legt los :
Jetzt schaltet der Scheduler um, und Prozess2 beginnt :
-> Deadlock : weder Prozess1 noch Prozess2 können weiterarbeiten !
17
Mit Semaphor (Mutex) :
Mutex
(Der Mutex wird oben (t11 bzw.t21) genommen, unten (t13 bzw. t23) wieder zurückgelegt)
Prozess 1 beginnt wieder :
18
Nun der Scheduler, Prozess 2 wird gestartet …. und wird blocked oder wartet einfach, weil er
den Mutex nicht nehmen kann :
Also kommt irgendwann wieder Prozess 1 im Scheduling dran, und macht weiter :
.. und verläßt dann die critical section, wobei er Betriebsmittel und Mutex freigibt :
19
Speicherverwaltung im Multitasking
Das Problem ist schnell erklärt :
Im Multitasking eines 32-bit Windows laufen z.b. 20 Tasks (schauen Sie in Ihren Taskmanager).
Jede Task kann theoretisch bei 32 bit Adressbreite 4GB Ram adressieren -> 20 x 4 GB wären
80GB nötiger Hautpspeicher !
Die Lösung auch :
SUN Microsystems entwickelte rund 1970 ein System, das mit einem eigenen Prozessor Daten
aus dem RAM im Hintergund auf die Festplatte auslagert ( und bei Bedarf wieder zurückholt),
um Hauptspeicherplaz zu gewinnen. Man nannte das “virtual memory“.
Schon um 1979 wurde der seperate Prozessor dann auf den Chip de CPU integriert, z.b. von
Motorola bei 68000-Prozessor, die Komponente heißt MMU (memory management unit) :
Heute integriert : MMU auf CPU
RAM
Prozessor
für
virtual
memory
Festplatte
CPU
Systembus
Die Datenpakete, die zwischen RAM und HD hin-und hergeschoben werden, sind (wegen
der Physik der Festplatten) nie Bytes, sondern „pages“ (page = Seite), das ist die Einheit, in der
die Festplatte pro Lese- und Schreibzugriff Daten transportiert. Meist sind das heute 4 kB.
Das Verfahren wird deshalb auch „paging“ genannt.
20
Zur Erklärung hier ein (unrealistisches) Beispiel für ein paging-Verfahren.
Wir stellen uns einen 16bit-Rechner mit 32 kB RAM vor.
Dieser adressiert nun 16 bit Adressen, obwohl er bloß 32k Hauptspeicher hat !
Der Adressbus des Rechnersystems ist 16 bit breit.
Damit kann man 64kB adressieren (siehe Hilfsblatt : “Dualsystem“ im Übungsteil).
(Vorausgesetzt wird, das der RAM byteweise adressiert wird)
Die page-Größe wird mit 4kB angenommen (siehe oben, Blockgröße bei Standard-Festplatte).
Will man innerhalb einer Seite ein Byte adressieren, braucht man dazu 12 bit ( -> 4k !).
Wenn ich diese 12 bit als unteren Teil in die 16 bit-Adresse des (virtual !) memory eintrage,
bleiben noch 4 bit übrig : damit nummeriere ich die Seiten, die rumkopiert werden :
Im Beispiel :
Von einem Programm zum Beispiel angesprochene Adresse 8196 (=virtuelle Adresse !) :
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
Wird von der MMU jetzt zerlegt, in Seitenadresse („Index“) und Adresse auf Seite („Realtiv“) :
0
0
1
0
Seitenadresse (= 2)
0
0
0
0
0
0
0
0
0
1
0
0
Adresse des Bytes auf der Seite 2 (= 4)
Benötigt wird also die Seite (page) Nr. 2, und dort muß dann das Byte Nr.4 adressiert werden.
21
Zur Erinnerung : virtual memory heißt, das ein Teil der Seiten im RAM ist, ein anderer Teil aber
auf die Festplatte ausgelagert wurde.
Ist die benötigte Seite Nr. 2 jetzt gerade im RAM vorhanden, oder liegt diese Seite jetzt
gerade auf der Festplatte ??
Dazu führt die MMU eine Verwaltungstabelle, die sogenannte page-table.
Auf dieser ist vermerkt, welche Seite (Index) des virtual memory im Hauptspeicher liegt oder
nicht (Präsenz-Bit =1 oder =0), und wenn ja, in welcher RAM-Seite (Rahmen oder Frame) :
Index
PB
Rahmen
0000
1
010
0001
1
001
0010
1
110
0011
1
000
0100
1
100
0101
1
011
0110
0
-
0111
0
-
1000
0
-
1001
1
101
1010
0
-
1011
1
111
1100
0
-
1101
0
-
1110
0
-
1111
0
-
22
In unserem Beispiel haben wir Glück gehabt, die Seite 2 ( 0010 ) ist gerade im RAM, und hat
dort die Adresse 100. Wir bilden damit die neue physikalische RAM-Adresse, indem wir den
virtuellen Index durch den physikalischen Frame ersetzen :
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
Aus der virtuellen Adresse 8196 ist die physikalische Adresse 24580 entstanden.
Diese wird von der MMU jetzt im RAM adressiert.
Die CPU des Rechners hat von der Mogelei gar nichts mitbekommen, sie denkt ja, sie hätte die
vollen 16 Bit Adressraum (64k).
Interessant wird es, wenn die gewünschte page nicht im RAM vorhanden ist.
Man nennt das einen paging error. (Kann man in Windows im Taskmanager sehen)
Die MMU teilt dem Scheduler mit, daß das Programm, das gerade läuft, nicht weitermachen
kann : es wird blocked gesetzt (wie bei einem anderen I/O-Zugriff auch).
Die MMU muß auf der Festplatte nach der ausgelagerten page suchen (hierzu wird auch das
Filesystem der Festplatte benutzt, auf das hier nicht eingegangen wird), und diese ins RAM
holen.
Und da wird’s jetzt eng : das RAM ist ja voll !
In jedem Betriebssystem gibt es hier nun komplexe Strategien, welche der Seiten im RAM mit
den benötigten überschrieben werden sollen (Seitenersetzungs- oder paging-Strategie). Diese
tragen nicht unerheblich zur Leistungsfähigkeit eines Betriebssystems bei !
(Beispiele : NRU= not resently used, NFU = not frequently used, usw..)
23
In Windows wird im Prinzip das „working-set“-Verfahren benutzt :
Ausgehend vom „Lokalitätsprinzip“ (das bedeutet, daß wahrscheinlich in der nahen Zukunft
Adressen benutzt werden, die sich in der Umgebung der aktuellen befinden), wird nicht nur
die eine Seite geladen, die den paging-error ausgelöst hat, sondern gleich eine Menge Seiten
da außen rum, in modernen System mit großen Speichern gleich ein paar Tausend.
Zur Auswahl der dafür auszulagernden Seiten wird im Wesentlichen der LRU (least recently
used) – Algorithmus benutzt, der die Seiten wählt, die am längsten nicht mehr benutzt
wurden.
.. Wenn dann der paging-Vorgang endlich abgeschlossen ist, sind also einige (viele) Seiten aus
dem RAM in die Festplatte ausgelagert worden, dafür einige andere (incl. der benötigten) von
der Festplatte ins RAM geschrieben worden. Der paging-eror ist damit behoben, die
ursächliche Task wird von blocked nach sleeping gesetzt und kommt irgendwann im
Scheduling wieder dran.
IM ÜBUNGSTEIL :
Übung :
Speicherverwaltung
IM ÜBUNGSTEIL :
Hilfe zum Dualsystem
24
Windows (Microsoft-Server)
Altes Konzept (Windows NT ab ca. 1990) :
NT-Server
NT-Server
PDC
BDC
MitgliedServer
NT-Client
Neues Konzept (ab Windows 2000, ca. 2000) :
Active Directory : gemeinsame Resourcen-Datenbank
DC
DC
DC
DC
DC
DC
MitgliedServer
2000pro,
WinXP,
Win7 ….
Voraussetzungen : TCP/IP-Netz, DNS-Server (DHCP optional)
25
Domänencontroller genauer betrachtet :
In Windows NT war die Administration nur auf dem PDC (primary domain controller) möglich.
Der BDC (backup domain controller) trug eine „read-only“ - Kopie, um bei Ausfall des PDC den
Netzbetrieb aufrecht halten zu können.
Ab Windows 2000 mit Active Directory ist die Administration der Netzresourcen auf allen DC
möglich, jeder trägt eine beschreibbare Kopie der Datenbank, die in zyklischen Abständen von
allen DC repliziert wird. Hierzu werden Zeitstempel auf die Einträge benutzt, die sogenannten
„update sequence numbers“. Diese sorgen dafür, daß immer die neuste Änderung netzweit
auf allen DC aktualisiert wird.
Weitere DC erhöhen die Betriebssicherheit des Netzes.#
Besondere Funktionen des ersten installierten DC :
Der erste installierte Domänencontroller agiert als Betriebsmaster. Seine Spezial-Funktionen
(„FSMO“ flexible single master operations) werden nicht repliziert, das heißt bei Ausfall muß
ein anderer Server manuell zum Betriebsmaster hochgestuft werden . Zu diesen Aufgaben
gehört die Verwaltung der numerischen ID der Objekte (user, computer usw.), des Active-Dir
Schemas (welche Funktionen möglich sind) und noch eine Reihe von weiteren
Verwaltungsaufgaben.
26
Login im Netz mit Kerberos
Active Directory entstand aus dem Verzeichnisdienst X.500 (1990).
Ein Kerngedanke eines Verzeichnisdienstes („directory service“) ist die plattformunabhängig
Authentifizierung. Das bedeutet, ein einziger login im Netz (an der Verzeichnisdatenbank) soll
genügen, um alle bekannten Systeme im Netz nutzen zu können : auch Systeme mit anderen
Betriebssystemen ! Heute können das die meisten netzfähigen Geräte, auch Smartphones
usw..
Login-Vorgang :
KDS
KDS : key distribution service
Protokoll : LDAP lightweight directory access protocol
GINA
GINA : graphical interactive network authentification
Mit dem GINA-Tool (mit Bildschirm-Fenster) stellt der Client eine LDAP-Verbindung zum
Datenbankserver (ein DC) her.
Dort nimmt der key distribution service (KDS) die Anfrage entgegen.
Der ticket granting service (TGS) stellt bei korrektem login ein ticket granting ticket (TGT) aus.
Das ist praktisch ein „all-inclusive-Bändchen“. Es ist mit dem User-Passwort als Key
verschlüsselt : deshalb sollten User-Passwörter lang sein !
Es gilt eine gewisse Zeit (time to life, TTL), in der es auf jedem Server im Netz den Zugang
ermöglicht. Der Client zeigt sozusagen beim Zugriff auf einen beliebigen Server sein „allinclusive-Bändchen“, das TGT (Port 88), und bekommt dann vom Server ein service-ticket
(ST). Dieses ist wieder verschlüsselt, und gilt nur auf diesem einen Server.
Der User merkt von all dem nichts.
27
Aufbau eines Verzeichnisdienstes
Basierend auf dem X.500 – Standard wurden für viele Betriebssysteme Verzeichnisdienste
entwickelt. Novell z.b. bietet NDS an, den „Novell Directory Service“, für LINUX-Systeme
gibt es OpenLDAP, bei Microsoft heißt der Dienst Active Directory.
Will man hier begrifflich präzise sein, so muß man in den Verzeichnisdienst, also die
Datenbank und ihre Tools, und das Zugriffsprotokoll trennen.
In X.500 heißt der Protokollstandard DAP (directory access protokoll). LDAP ist eine
Untermenge davon, das lightweight directory access protocol.
(OpenLDAP ist also eigentlich unkorrekt, weil das ja ein Protokoll sein müßte, aber ein
Verzeichnisdienst ist…)
VORSICHT :
DER BEGRIFF „VERZEICHNISSDIENST“ HAT NICHTS MIT EINEM FESTPLATTENVERZEICHNISS ZU TUN !!
Die Datenbankstruktur eines Directory Service läßt sich gut graphisch darstellen, das sieht aus
wie ein Baum (heißt auch tree), aber die Wurzel ist oben :
Wurzelobjekt : root (heißt so wie die Domäne)
Strukturobjekt (tree-object) : Dient nur der Strukturierung !
Bei Active Directory heißt es organizational unit (oder „Container“)
Resource (leaf-object) : Die vorhandenen Objekte
In AD im wesentlichen computer und user
28
In Active Directory gibt es eine Reihe von vorgegebenen Objekten und Containern.
(Bei Novell z.b. ist das anders, da ist der Baum erstmal leer).
Die wesentlichste Eigenschaft des directory tree ist, daß er ein hierarchisches System
beschreibt : Für einen Container definierte Einstellungen übertragen sich nach unten an
alle im Ast liegende Objekte, auch in weiteren Containern.
Man nennt dies Vererbung oder inheritation :
Domäne : dv-script.tsm.de
Container A mit Parameter XY
Container B mit Parameter AB
User HANS
hat XY + AB
User MAX
hat XY
29
Objekte in Active Directory :
Administriert werden im Wesentlichen Computer und User.
Im objektorientierten Sinn sind dies Klassen, also „Vorlagen“ für die zu erzeugenden Objekte.
Wie es sich für Objekte gehört, haben diese eine Reihe von Eigenschaften (Attribute :
mehrere Namen, Telefonnummern, usw…). Ein Teil davon sind „lebenswichtige“ Attribute,
ohne die ein Objekt nicht existieren kann : mandatory attributes. Die übrigen, nicht
lebenswichtigen, heißen optional attributes.
Objekte in Active Directory haben neben den internen numerischen Kennungen (SID) für den
Menschen lesbare Namen :
distinguished name (DN) :
cn = HANS, ou = B, ou = A, dc = dv-script, dc = tsm, dc = de
common name
organizational unit
domain component
Eine vereinfachte Form ist der “kontextfreie” Anmeldename (der Kontext, die Stelle im Baum,
wird dann automatisch gesucht) :
user prinzipal name (UPN) :
[email protected]
Am Einfachsten ist der aus NT-Zeiten stammende Name für den Security Account Manager :
SamAccountName :
HANS
30
Administration mit Active Directory :
Administrieren in Active Dir bedeutet zum Einen, daß die zu verwaltenden Objekte, also
die Computer im Netz und die daran arbeitenden User in einen sinnvoll strukturierten
Verzeichnissbaum eingegeben (oder mit einem Programm importiert) werden müssen.
Dann können Sie mit Parametern zurechtgestutzt werden. Aus geschichtlichen Gründen
heißen diese Parameter bei Microsoft Gruppenrichtlinien (group policies).
Gruppenrichtlinien werden an Container vergeben. Sie vererben sich dann wie beschrieben
nach unten. Wenn der Baum geschickt aufgebaut ist, kommt man mit wenigen Richtlinien aus.
Es gibt enorm viele einstellbare Parameter, sie sind aber streng in zwei Familien eingeteilt :
Computerrichtlinien wirken nur auf den Objekttyp Computer
Benutzerrichtlinien wirken nur auf den Objekttyp User
Das kann Probleme bereiten, wenn man unsauber arbeitet. Wenn in Containern die
Objekttypen gemischt sind, ist die Wirkung der Richtlinien nicht sehr übersichtlich …
31
Active Directory in der Praxis :
Hier ein Ausschnitt der Labornetzverwaltung der Technikerschule :
Default-Objekte
Neuer Container
Drunter noch einer
32
Hier nun (in der alten Ansicht mit Windows2003) die Eigenschaften eines Container-Objekts :
Die Gruppenrichtlinien gehören zu den Eigenschaften des „räume“- Objekts.
Eine solche Gruppenrichlinie kann beliebig viele Parametereinstellungen enthalten.
Es ist aber sicher eine gute Idee, pro Richlinien nur eine einzige Parameteränderung
durchzuführen, und die Richtlinie entsprechend zu benennen, um das System übersichtlich zu
gestalten.
Mit einem Klick auf NEU wird eine neue Gruppenrichtlinie hinzugefügt (hier : skripttest).
Dann kann mit einem Klick auf BEARBEITEN der Gruppenrichtlinien-Editor geöffnet werden :
33
..und zeigt links ein Menü und rechts die enthaltenen, einzelnen Gruppenrichtlinien.
WICHTIG :
Man erkennt die wichtige Unterscheidung in Computerkonfiguration und
Benutzerkonfiguration. Wenn in diesem Beispiel in Benutzerkonfiguration eine passende
Richtlinie gefunden und aktiviert wird, bewirkt das dann NICHTS, weil das Objekt, an dem
wir arbeiten, der Container räume, keine Benutzer, sondern nur Computer enthält !
IM ÜBUNGSTEIL :
Praktikum : WindowsDomäne aufbauen
IM ÜBUNGSTEIL :
Praktikum : Active
Directory adnministrieren
34
Datenzugriffsrechte in Windows
In Windows kann ohne Serverunterstützung direkt auf Daten eines anderen Computers
zugegriffen werden. Das nennt man peer-to-peer Zugriff. Hierzu muß einfach eine Freigabe
erzeugt werden und eine Zugriffskennung bekannt sein.
Im Serverbetrieb spielt der peer-to-peer Zugriff wegen mangelnder Übersichtlichkeit und
Datensicherheit keine Rolle.
Wichtige Daten sollten auf einer technisch dafür ausgerüsteten Maschine gespeichert sein.
Schnelle Netzanbindung, robuste Hardware (z.b. redundante Netzteile), und ein schnelles,
sicheres Festplattensystem (Raid) sind empfehlenswert.
In kleinen Netzen kann das der Domänencontroller sein, in größeren Netzen wird man einen
seperaten Fileserver (vielleicht ein geeignetes NAS) hierfür einsetzen.
SCHUTZ : NTFS-Rechte
Windows als Fileserver :
1)
Daten
Direkter Zugriff
über
angeschlossene
Tastatur/Monitor
3) Zugriff über
Terminalservice
SCHUTZ : FREIGABE-Rechte
2) Zugriff über das Netz vom
Client-PC aus : Freigabe !
35
Windows ist als non-dedicated Serversystem konzipiert. Das bedeutet, daß der (File-) Server
auch als Arbeitsstation benutzt werden kann. In sehr kleinen Umgebungen mit wenigen
Rechnern mag das Sinn haben.
(In anderen Systemen, Novell zum Beispiel, ist das nicht möglich. Auf einem Novell-Server
kann keine Applikationssoftware – z.b. Textverarbeitung – installiert werden : das nennt man
einen dedicated Server)
Der non-dedicated Aufbau bringt eine kompliziertere Rechtestruktur mit sich. Es kann wie im
Bild auf mehreren Wegen auf die Daten des Servers zugegriffen werden.
Freigaberechte :
Wirken ausschließlich auf den Netzzugriff über das Freigabeprotokoll (SMB : server message
blocks). Werden im System gespeichert, nicht als Attribute auf der Festplatte.
Zugriffe über direkt angeschlossene Hardware (Terminal) oder die netzgestützten TerminalServices (Remote Desktop : RDP-Protokoll) werden nicht beeinflußt !
NTFS-Attribute :
Sitzen als Filesystem-Attribute an den Daten der Festplatte. Administrierbar unter SICHERHEIT
bei den Eigenschaften der Daten in Windows. Wirken auf alle Zugriffe.
Ein dedicated Server benötigt keine Attribut-Rechte, das macht ihn deutlich übersichtlicher !
IM ÜBUNGSTEIL :
Praktikum : WindowsRechtesystem
36
Skriptbasierte Administration von Windows
Die Administration per Skript ist immer dann sinnvoll, wenn entweder oft wiederkehrende
Tätigkeiten auszuführen sind oder wenn eine große Menge an Objekten (z.b. viele User)
gehandelt werden müssen.
Die Administration geschieht objektorientiert, hierzu stehen in Klassenbibliotheken innerhalb
der Windows-Betriebssysteme umfangreiche Hilfsmittel zur Verfügung. Dokumentation
hierzu findet sich im Internet, die Orginaldoku in der MSDN-Bibliothek.
Hierzu werden Programme geschrieben, die aber nicht direkt auf Windows aufsetzen.
Sie werden von einem Interpreter („Script Engine“) in einer sogenannten „Laufzeitumgebung“
ausgeführt, die auch für die Kommunikation mit den Systemkomponenten sorgt.
Eine solche Laufzeitumgebung ist der Windows Scripting Host (WSH), den wir hier nutzen.
Als Script Engine verwenden wir VBscript.
UserProg.
„Laufzeitumgebung“
Klassenbibliothek
Betriebssystem
Hardware
37
Zur Script-Engine :
Syntax von VBscript („VB classic“)
Sie erzeugen ein Textdocument, bearbeiten den Inhalt mit dem Editor, und speichern es nicht
als .txt, sondern als .vbs (Vorsicht : nicht als Textfile sondern als „alle Dateien“ speichern)
Dann einfach Anklicken …
Wenn es Schwierigkeiten macht, mit dem Taskmanager den Prozess wscript.exe stoppen !
VB classic ist eine Interpretersprache (Skipt-Sprache), das bedeutet, sie wird nicht übersetzt
bevor man sie ausführen kann. Deshalb ist auch keine Deklaration von Variablen nötig.
Anweisung :
a=b+c
a=b–c
a=b*c
a=b/c
a=b+1;
Schleife :
solange Bedingung gilt
do while a < 0
…..
…..
loop
Zählschleife :
für i von 1 bis 100
for i=1 to 100
…..
…..
next
38
Verzweigung :
a>0?
ja
Vergleichsoperatoren :
nein
>
<
>=
<=
=
<>
if a > 0 then
.….
…..
…..
else
…..
…..
end if
größer als
kleiner als
größer gleich
kleiner gleich
gleich
ungleich
Stringoperationen :
Strings (und Variableninhalte) zusammenfügen : neu = “Hallo“ & name
Stringanalyse :
a = right (test,3)
b = left (test,4)
c = mid (test, 5, 3)
3 Zeichen von rechts aus test in a
4 Zeichen von links aus tes in b
3 Zeichen ab der 5-ten Stelle von test in c
Ein-Ausgabe :
a = InputBox(“Text zur Eingabe”)
MsgBox(a)
IM ÜBUNGSTEIL :
Praktikum : VBScript
39
Beispiel für die Nutzung von Windows-Objekten mit dem WSH
Alle Komponenten in der Windows-Domäne, vom Userobjekt in Active Directory bis zum
Textfile auf der Festplatte werden objektorientiert betrachtet.
Eine sehr mächtige Klasse ist zum Beispiel das Scripting.FileSystemObject
Diese Klasse beinhaltet eine große Anzahl von Methoden, die alle möglichen Operationen
innerhalb eines Filesystems z.b. auf einer Festplatte ausführen können.
Hier als erster Einblick eine Liste der Methoden :
40
Syntax für die Nutzung von Windows - Klassen
So kann z.b. ein Textfile (welches wieder ein Objekt darstellt) erzeugt werden :
Befehl : erzeuge Objekt
Set apfel = CreateObject ( “Scripting.FileSystemObject“)
Objektname
Klasse
apfel.CreateTextFile(“c:\testordner\testfile.txt”)
Objekt
Methode
Parameter
Ein wenig komplexer, wenn man das erzeugte Objekt gleich wieder nutzen möchte :
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\testfile.txt", true)
Sofortiges Erzeugen eines TextStream-Objekts
Überschreiben bestehender files erlaubt
a.WriteLine("This is a test.")
a.Close
Methoden des TextStream-Objekts
IM ÜBUNGSTEIL :
Praktikum : Scripting.
FileSystemObject
41
Skriptbasierte Administration von Active Directory
Die Administration geschieht durch Nutzung des Active Directory Service Interface ADSI.
Dieses stellt im Prinzip eine Klassenbibliothek für die AD-Objekte bereit.
Es gibt hier nur wenige Objekte, im Wesentlichen wie schon besprochen:
user, computer und organizational units.
Diese haben als wichtige Methoden create und delete zum Erzeugen und Löschen von
Objekten, sowie get und put zum Lesen und Schreiben von Attributen.
Der Zugriff in die AD-Datenbank kann auf verschiedene Wegen erfolgen, der einfachste ist
wohl die Methode, bei der mit dem LDAP-Protokoll ohne Angabe eines Servernamens direkt
auf die ActiveDirectory-Verwaltung zugegriffen wird (serverless binding). Welcher Server das
dann wirklich ausführt ist für den Benutzer unwichtig.
Die Position des zu referenzierenden Objekts im AD-Baum (Kontext) wird mit dem
sogenannten Moniker angegeben. Dieser nennt zunächst das zu verwendende
Zugriffsprotokoll, hier also LDAP (was Microsoft als Provider bezeichnet). Dann folgt der
common name cn (siehe oben) :
LDAP://ou= B, ou= A, dc= dv-script, dc= tsm, dc =de
(ein Container hat keinen common name !)
Ablauf :
1. Schritt : Referenzieren eines AD-Objekts mit dem Moniker
2. Schritt : Aufruf einer seiner Methoden
Nächste Schritte : weitere Methodenaufrufe…
Letzter Schritt : Schreiben des modifizierten Inhalts in AD mit der SetInfo-Methode
42
Beispiel : Einen User erzeugen im Container A :
Eine "Bindung" ist das Herstellen eines Zugangs zu einem Objekt
in Active Directory. Bindungen können unter Angabe eines Servers
erstellt werden, besser jedoch (wie unter) als "serverless binding",
die Domäne teilt den Server dann automatisch zu.
VB-Funktion zur Herstellung
einer Bindung an ein
Active-Dir Objekt
"ADSI -PROVIDER" : gibt an, auf welchem Weg
die Daten erreichbar sind (hier LDAP-Protokoll)
set apfel = GetObject("LDAP://ou=A,dc=dv-script,dc=tsm, dc=de")
Erstellt eine
Referenz auf das
durch die Bindung
erreichbare Objekt
Referenzname
DN (distinguished name), gibt den "Pfad" zum
Objekt in Active Directory an
Besteht aus :
OU : organsiational unit (Container)
CN : commen name (User, Computer..)
DC : domain component (DNS-Name)
Methode, die eine Instanz (=Objekt) der als
Parameter angegebenen Klasse erzeugt
set birne = apfel.create("user","cn=hans")
erstellt Referenz
auf das erzeugte
Obekt
ReferenzName
Klasse
Objektname als RDN (relative distinguished name)
birne.put "samaccountname", "wurst"
Methode, die ein Attribut setzt.
Name des Attributs
Manche Klassen (user z.b.)
haben verbindliche Attribute (mandatory attributes),
die gesetzt werden müssen (sonst Fehlermeldung)
Wert des Attributs
birne.SetInfo
Methode, die Objekte und deren Parameter an Active Dir
überträgt (Netzzugriff)
43
Damit kann man schon fast alles machen. Welche Attribute ein Objekt hat, schaut man am
Besten im Internet nach. Entweder Microsoft direkt :
Google-Suche nach : MSDN Attributes ADSI
oder bei SelfADSI :
http://www.selfadsi.de/user-attributes.htm
Die Collection als Hilfsmittel für Schleifenstrukturen
Schwierig wird es mit der bisher beschriebenen Methode beim Zugriff auf Container.
Will man zum Beispiel die Namen aller Objekte innerhalb eines Containers wissen, können das
unter Umständen sehr viele sein, und die Anzahl ist unbekannt. Man nennt dies eine
Collection. Hierzu verwendet man am Einfachsten die for..each – Schleife :
Set apfel = GetObject (“LDAP://ou=A, dc=dv-script, dc=tsm, dc=de”)
for each gefundenes in apfel
seinname = gefundenes.samaccountname
msgbox(seinname)
next
Diese Schleife läuft solange, wie Objekte gefunden werden.
IM ÜBUNGSTEIL :
Praktikum ADSI leicht
IM ÜBUNGSTEIL :
Praktikum : ADSI schwer
44
Internettechnologien
Client/Server-Struktur
Request
Client
Response
Server
Ein Client ist ein Programm das einen Dienst (Service) von einem anderen Gerät anfordert.
Das kann das Schicken von Daten oder auch eine mechanische Funktion sein.
Ein Server ist ein Programm, das eine Funktion auf Anforderung ausführt.
Die Anforderung des Dienstes heißt Request (Service-Request), das Erbringen des Dienstes
wird Response genannt.
Der Client ist also ein Requester, der Server ein Responder.
Beispiel :
Ihr Nachbar spielt READ-Responder, sie sind der READ-Requester. Der Dienst heißt READ, er
beinhaltet das Lesen des ersten Buchstabens auf einer Seite.
1) Sie (Client) sprechen einen READ-Request aus
2) Ihr Nachbar (Server) kann diesen erst mal quittieren oder nicht (beides gibt’s)
3) Ihr Nachbar führt den READ-Dienst aus, er liest den Buchstaben
4) Ihr Nachbar schickt einen READ-Response. Das bedeutet erst mal nur, daß er den READ
gemacht hat. Ob er ihnen den Buchstaben auch sagt, hängt von der Definition des
READ-Dienstes ab.
45
HTTP-Request
Im Internet wird nun bei Diensten mit angegeben, welches Protokoll zur Kommunikation
benutzt wird. Das Protokoll bestimmt dann auch, wie die Dienste im Detail aussehen.
Der übliche Weg im Internet ist die Aussprache eines HTTP-Request durch eine ClientSoftware (meist ein Browser) und dessen Beantwortung durch den HTTP-Response des
Serverprogramms.
Der Transport durch TCP/IP geschieht standardmäßig über SAP („Port“) 80.
Das Adressformat für einen korrekten HTTP-Request sieht so aus :
Socket in TCP/IP
http://www.ts-muenchen.de:80/index.html
Protokoll
Service AccessPoint Server-Root
DNS-Name der Servermaschine (IP geht auch)
Dieses Format heißt Uniform Resource Locator (URL)
www ist hier kein Protokoll oder so, der Server hat diesen Hostnamen !
46
Dokument(Pfad..)
Apache-Server
Als Serverprogramme sind viele Alternativen möglich, der Windows-Server (bei den
Serverbetriebssystemen von Microsoft enthalten) heißt IIS (Internet Information Server).
Am meisten verbreitet ist jedoch eine OpenSource – Variante, der Apache Server
Die wesentlichsten Komponenten und Dateien sehen Sie hier :
Der eigentliche Server
(HTTP-Responder)
Apache
Konfigurationsfile :
httpd.conf
wird bei Serverstart
gelesen
……..
……..
Document-Root, das Verzeichnis, in
dem alle Webseiten gespeichert sind
cgi
……..
……..
……..
……..
Der cgi-Mechanismus sorgt
dafür, daß die Clients ihre
Antworten (an die richtige
Adresse) kriegen.
(Erklärung später …)
alle Zugriffe werden im
access.log protokolliert
Fehler (Zugriffsfehler) werden
im error.log gespeichert
Bei einer Windows-Standardinstallation entpacken sie das Serverpaket XAMPP auf ihrem
Rechner (eXtended Apache Mysql Perl Php), da haben sie dann ‘ne Datenbank und 2
Programmiersprachen gleich mitinstalliert.
Sie finden dann in C: einen Xampp-Pfad, und darin die oben abgegebene files.
IM ÜBUNGSTEIL :
Praktikum ApacheInbetriebname
47
Interaktives HTML
Gemeint ist hier, daß Der Webserver nicht nur wie bei simplen Webseiten einfach durch
Schicken von HTML-Code als Response antwortet, sondern daß am Client erhobene Daten
zum Server geschickt und verarbeitet werden. Das ist die technische Grundlage von ecommerce.
Für die Datenverarbeitung sind hier prinzipiell 2 Varianten möglich :
a) Client-sided
Im Clientsystem werden die (meist vom Benutzer eingegeben) Daten direkt lokal
verarbeitet. Der Programmcode steckt in der HTML-Seite, die vorher vom Server
geholt wurde. Sprache : Java oder Varianten.
b) Server-sided
Am Client werden Daten zwar erfasst (meist im Browser durch Eingabefelder o.Ä),
dann aber nicht lokal verarbeitet, sondern an den Server geschickt, und dort
verarbeitet. Sprache : früher PERL, heute meist PHP.
Die Variante a) ist schneller, hat aber den Nachteil, daß eine ungünstige Clientkonfiguration
die Verarbeitung behindern oder unmöglich machen kann.
Variante b) ist wegen der nötigen Übertragung langsamer, aber der Programmierer weiß, wie
seine Maschine konfiguriert ist, und es läuft sicher …
Bei e-commerce wird man alle Programmfunktionen, die dem Komfort und dem Design
dienen, client-sided ausführen, alle Funktionen die zum Gelingen des Geschäftsprozesses
unabdingbar sind, server-sided.
48
Wir gehen nun im Folgenden davon aus, daß ein Client eine Webseite anfordert, die dann
einen wie oben beschriebenen Vorgang server-sided ermöglichen soll.
1) Client schickt (vom Benutzer ausgelöst) einen http-Request :
Apache
HTTP-Request
Server-Rechner mit Apache-Installation
Client-Rechner mit Browser
2) Der Server sucht das Dokument im angegebenen Pfad (unter Document-Root), und schickt
es an den Client. In diesem HTML-File sind graphische Elemente enthalten, die dem
Benutzer die Eingabe von Daten ermöglichen (Textfelder usw..) : html-forms
http-Response
Apache
49
3) Der Benutzer schreibt seine Daten rein, und schickt sie mit einem Knopfdruck im Browser
wieder an den Server.
Im HTML-Form ist auch eine Information enthalten, welches Programm im Server nun
diese Daten bekommen und verarbeiten soll : form-action
Dies ist wieder eine HTML-Seite mit der Besonderheit, daß ausführbarer Code (meist
PHP) enthalten ist.
Apache holt sich diese Seite wieder aus Document-Root, und prüft nun (Steuer-Tags auf
der Seite) welche Teile davon er dem PHP-Interpreter zur Verarbeitung weitergeben muß
PHP
Apache
Der Programmteil auf der Seite (meist ein PHP-Skript) bekommt die Daten, verarbeitet
sie, und schickt möglicherweise auch eine Antwort in Form einer Ausgabe.
Diese Ausgabe wird nun aber natürlich nicht am Monitor des Servers angezeigt, sondern
zurück zum Client geschickt, und dort an den Browser zur Anzeige übergeben.
Diese Funktion (Ausgabe des richtigen Skripts an den richtigen Client im Internet) leistet
das common gateway interface (cgi).
PHP
cgi
50
HTML-Forms
Um das Ausprobieren zu können, benötigen wir nun zunächst die Eingabemöglichkeit am
Browser, das HTML-Form.
Hier der elementare Kern , in eine HTML-Seite reingeschrieben :
Definition des
HTML-Forms
„action“ gibt den
Pfad zum Skipt im
Server an
„method“ wählt
die Methode der
Datenübertragung
<form action= “script.php“ method = “post“>
Ihr Vorname lautet : <input type= ”text” name= “vor“>
<input type= “submit“>
„name“ definiert
den Variablennamen des Werts
</form>
„submit“ ist
der Knopf zum
Abschicken
„input type“ gibt
das Eingabefeld in
HTML an
„text“ ist z.b. ein
simples Textfeld
Als Datenübertragungsmethode stehen get und post zur Verfügung :
Get schickt die Daten einfach sichtbar an die Server-URL mit einem Fragezeichen angehängt
Post schickt die Daten unsichtbar und verschlüsselt.
Man kann bei der GET-Methode die zu übertragenden Daten auch selber anhängen, und dann
mit einer beliebigen anderen Aufrufmethode (z.b. mit einem Link) arbeiten :
<a href = "php1.php?var1=eins">php_hier_aufrufen</a>
51
52
PHP
PHP ist eine Skriptsprache ähnlich wie VBScript oder so, und auch genauso einfach.
So richtig witzig ist es aber in Verbindung mit HTML, weil man da PHP direkt reinschreiben kann.
Der Aufruf schaut in HTML so aus :
<html>
<body>
das ist ein test, diese zeile ist normales html
<?php
print "das hier ist php-code";
?>
</body>
</html>
So ein File muß dann .phtml oder .php (je nach Serverkonfiguration) heißen, damit der Webserver das kapiert...
Hinter jede Zeile ; setzen !
Variable :
$name = "Alf";
$zahl = 176;
$klasse[1] = "Anton";
$klasse[2] = "Berta";
Eingabe :
braucht man nicht, Variablen kommen immer vom HTML-Client
Ausgabe :
echo $name;
print $name;
print "Name ist :".$name."<br>";
(identische Funktion..)
Der Punkt fügt den Ausdruck zusammen,
Html-Tags werden als String ausgegeben.
Schleifen, Bedingungen :
if ($a>$b)
{
print "a ist größer";
}
if ($a>$b)
{
print "a größer";
}
else
{
print "b größer";
}
$i=1;
while ($i<10)
{
print $i;
$i = $i+1;
}
for ($i=1; $i<10; $i++)
{
print $i;
}
....usw, also das übliche !
53
Beispiel für server-sided Datenverarbeitung :
1) HTML-File mit enthaltenem HTML-Form. Das wird zunächst aufgerufen :
<html>
<body>
hallo, ich bin html <br><br>
<form action = "./aktion.php" method = "post">
<input type=”text” name="alf"><br><br>
<input type="submit">
</form>
</body>
</html>
Am Browser erscheint „hallo, ich bin html“ und das Eingabefenster für die form-Daten. Ein
Textfeld holt einen String, der als Variable dann „alf“ heißen wird, mit dem „submit“-Knopf
wird der Wert an den Server geschickt und das HTML-File „aktion.php“ geladen, welches PHPCode enthält :
2) Die vom Form aufgerufene HTML-Seite aktion.php mit ausführbarem Code drin :
<html>
<body>
hallo, hier HTML !
<?php
print „hallo, hier PHP “;
print "Die Eingabe war : $_POST[alf]“;
?>
</body>
</html>
Wird vom Apache also aus dem Documentroot geholt, und dann nach dem <?php untersucht.
Alles zwischen diesem Zeichen und dem ?> wird an den PHP-Interpreter übergeben.
Alle Ausgaben (print..) gehen über den cgi-Mechanismus zurück an den Browser und werden
angezeigt.
IM ÜBUNGSTEIL :
Praktikum : lächerliche
PHP-Übung
IM ÜBUNGSTEIL :
Praktikum : .. immer noch
einfach !
54
grafische Möglichkeiten zur Gestaltung von HTML-Forms :
<html>
<body>
<form action= "./unter/form.php" method ="post">
<input type ="text" name="wort" value="eingabe hier">
<br><br><br>
<select name="pizza">
<option value="p1">funghi</option>
<option value="p2">mare</option>
<option value="p3">rabiata</option>
</select>
<br><br><br>
<input type="radio" name="cash" value="mastercard">mastercard<br>
<input type="radio" name="cash" value="visa">visacard<br>
<input type="radio" name="cash" value="nix">nix
<br><br><br>
<input type="submit" value="druckst du hier">
</form>
</body>
</html>
im Browser sieht das so aus :
55
Stringfunktionen in PHP
Syntax zur Bearbeitung von Strings finden Sie im Web zur Genüge.
Hier nur ein kleiner Einblick :




































strcmp — Vergleich zweier Strings (Binary safe)
strcoll — Locale-basierter Zeichenkettenvergleich
strcspn — Ermittelt die Anzahl der nicht übereinstimmenden Zeichen
strip_tags — Entfernt HTML- und PHP-Tags aus einem String
stripcslashes — Entfernt Quotes aus mit addcslashes behandelten Strings
stripos — Findet das erste Vorkommen eines Strings, unabhängig von Groß- und Kleinschreibung
stripslashes — Entfernt aus einem gequoteten String alle Quotes
stristr — Wie strstr, aber unabhängig von Groß- bzw. Kleinschreibung
strlen — Ermitteln der String-Länge
strnatcasecmp — String-Vergleich "natürlicher Ordnung" ohne Unterscheidung der Schreibweise
strnatcmp — String-Vergleich unter Verwendung einer "natürlichen Ordnung"
strncasecmp — Binärdaten-sicherer und groß- und kleinschreibungs-unabhängiger Stringvergleich
strncmp — String-Vergleich der ersten n Zeichen (Binary safe)
strpbrk — Durchsucht einen String nach einem Zeichen aus einer Gruppe von Zeichen
strpos — Sucht das erste Vorkommen des Suchstrings
strrchr — Sucht das letzte Vorkommen eines Zeichens in einem String
strrev — Kehrt einen String um
strripos — Findet das letzte Vorkommen, unabhängig von Groß- und Kleinschreibung
strrpos — Findet das letzte Vorkommen eines Zeichens innerhalb einer Zeichenkette
strspn — Ermittelt die Länge der am Anfang übereinstimmenden Zeichen
strstr — Findet das erste Vorkommen eines Strings
strtok — Zerlegt einen String
strtolower — Setzt einen String in Kleinbuchstaben um
strtoupper — Wandelt alle Zeichen eines Strings in Großbuchstaben um
strtr — Tauscht bestimmte Zeichen aus
substr_compare — Binärdaten-sicherer Vergleich beginnend an einer bestimmten Position
substr_count — Ermittelt, wie oft eine Zeichenkette in einem String vorkommt
substr_replace — Ersetzt Text innerhalb einer Zeichenkette
substr — Gibt einen Teil eines Strings zurück
trim — Entfernt Whitespaces (oder andere Zeichen) am Anfang und Ende eines Strings
ucfirst — Verwandelt das erste Zeichen eines Strings in einen Großbuchstaben
ucwords — Wandelt jeden ersten Buchstaben eines in einen Großbuchstaben
vfprintf — Schreibt einen formatierten String in einen Stream
vprintf — Gibt einen formatierten String zurück
vsprintf — Gibt einen formatierten String zurück
wordwrap — Bricht einen String nach einer bestimmten Anzahl Zeichen um
56
Dateien mit PHP bearbeiten :
Dateien werden in PHP wie üblich mit Handles geöffnet :
$opfer = fopen(“c:/testdatei.txt“, “w“);
(w : schreiben, r : lesen, a : anhängen)
dann kann man manipulieren :
$werte = fread ($opfer, $zahl);
liest eine Zahl von Zeichen aus der Datei
$wert = fgetc ($opfer);
liest das nächste Zeichen
$werte = fgets ($opfer, $zahl);
liest Zeichen, maximal bis zum Zeilenende
Fwrite ($opfer, $inhalt);
schreibt Variableninhalt in Datei
…und dann wieder zumachen :
Fclose ($opfer);
IM ÜBUNGSTEIL :
Praktikum : welches Bier
schmeckt mir ?
IM ÜBUNGSTEIL :
Zusatzaufgabe (optional) :
Sprachauswahl
57
Ausblick : Dynamische Websites
Ein professionelles Webangebot ist meist anders als bisher behandelt aufgebaut.
Nehmen wir als Beispiel Amazon : Wenn man für jeden Artikel eine eigene Webseite (.html)
schreiben müßte, wäre der Aufwand nicht zu bewältigen.
Das geht anders : ein allgemeines Seitengerüst (Design und so) wird dynamisch mit immer
neuen Inhalten gefüllt. Diese Inhalte kommen aus einer Datenbank.
Es gibt hier drei völlig verschiedene Aufgaben zu erledigen :
1) Das Seitengerüst und vor allem die Struktur der Datenbank, die dann die Inhalte
beisteuert, muß entwickelt werden. Eine Aufgabe für den Software-Entwickler.
2) Die Inhalte müssen in die Datenbank „eingepflegt“ (tolles Wort, oder ? … meint :
hineingeschrieben) werden. Das macht entweder ein tool (siehe z.b. Autoscout oder
Ebay, da machts der Kunde praktisch selber) oder eben ein MItarbeiter, wie z.b. bei
einem Webshop (Amazon z.b.), der das eingibt.
3) Die Inhalte müssen dann für den Kunden veröffentlicht werden. Heute üblicherweise
natürlich mit einer Weboberfläche.
Für alle drei Vorgänge brauchts eine Datenbank sowie eine Programmiersprache, die den
Zugang herstellt. Das macht man heute meist mit der Structured Query Language (SQL)
Datenbanken, die mit dieser Sprache bedient werden können, werden als SQL-Datenbanken
bezeichnet. Ein kommerzielles Beispiel ist ORACLE (das finden Sie z.b. auf dem ERP-Server der
digitalen Fabrik der Technikerschule), ein OpenSource-Produkt wäre z.b. mySQL
(das bei unseren Apache-Installationen mit XAMPP mitinstalliert wurde).
Im Weiteren betrachten wir zunächst den Datenbankentwurf und dann den Zugriff auf die
Datenbank aus dem Web über PHP und SQL.
58
Datenbanken
SQL - Datenbank
SQL-Datenbanken sind simpel aufgebaut :
Innerhalb der Datenbank (database) sind die Informationen in Tabellen (tables)
gespeichert. Die Daten (dataset, entity) werden zeilenweise in die Tabellen eingetragen, die
Spalten (attribute) bezeichnen die Informationsteile.
database “Werkstattverwaltung“
Attribute
Einträge, Datensätze
table “Mitarbeiter“
Nummer
Name
Abteilung
Telefon
123
Maier
EDV
12212
124
Müller
Werkstatt
456645
table “Fahrzeuge“
KFZNummer
Typ
Farbe
59
Zwischen den Einträgen bestehen Beziehungen (Relationen), deshalb werden
solche Datenbanken als relationale Datenbanken bezeichnet.
Für diese Beziehungen und den Aufbau der Tabellen (Attributstruktur) gibt es nun Regeln, die
dafür sorgen sollen, daß die Datenbank Informationen so speichert, daß sie jederzeit
eindeutig zu finden sind und widerspruchsfrei auch bei jeder Frage die gleiche Antwort
kommt.
Zunächst zwei grundliegende Forderungen an den Aufbau der Tabellen :
1) Primary key
Jede Tabelle benötigt ein Attribut, das eindeutig die Suche nach einem Eintrag
ermöglicht. Hierzu ein paar Fachbegriffe :
Ein Schlüsselkandidat ist ein Attribut, das die eindeutige Identifizierung
jedes Eintrags ermöglicht. Davon kann es mehrere geben.
Ein Schlüsselkandidat kann sich auch aus der Kombination von mehreren
Attributen ergeben (Beispiel : Eine Personalausweisnummer kann z.b. in Österreich
und Kanada gleich sein. Dann kombiniert man einfach Personalausweisnummer und
Land, und erhält damit Eindeutigkeit ).
Das ist dann ein zusammengesetzter Schlüssel.
Aus den Schlüsselkandidaten muß einer gewählt werden, der dann
Primärschlüssel oder primary key genannt wird. Oft wird er Einfachheit
halber eine fortlaufende Nummer hierfür benutzt.
60
2) Redundanzfreiheit
Eine Information, und das ist hier immer der Zusammenhang zwischen
zwei Einträgen : also zum Beispiel daß Frau Maier in der EDV arbeitet
(Maier - EDV), darf in einer database nur einmal vorkommen.
Steht zum Beispiel in der table Mitarbeiter ein Attribut Name und ein Attribut
Abteilung, und in der table Personalräte steht wieder Name und Abteilung :
Mitarbeiter
Nummer
Name
Telefon
Abteilung
1332
Maier
asffsd
EDV
Personalräte
Nummer
Name
Abteilung
e-mail
12
Maier
EDV
[email protected]
Dann kann folgendes passieren :
Frau Maier wird befördert, und steigt von der EDV in die Firmenleitung
auf. Die Sekretärin macht die Datenbank auf, und speichert dies, indem sie in der table
Mitarbeiter EDV nach Leitung ändert.
Nun fragen zwei verschiedene Mitarbeiter irgendwann die Datenbank ab, und die eine
Frage geht nach Mitarbeiter, die andere nach Personalräte.
Einmal kommt raus, daß Frau Maier in der EDV arbeitet, einmal, daß sie Mitarbeiter
der Geschäftsleitung ist. Man nennt dies eine Inkonsistenz, die dann nicht vorkommen kann, wenn die Beziehung Name <-> Abteilung nur einmal gespeichert ist.
Es gibt darüber hinaus eine ganze Reihe von Anforderungen, die Datenbankstrukturen
erfüllen müssen, um effizient und fehlerfrei arbeiten zu können. Hier gibt es
Regelwerke, die eingehalten werden sollen : Normalformen
z.b. : http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
…das ist, um es optimistisch zu sagen, nicht unkompliziert ;-)
61
Nun wollen wir aber nicht große Datenbanksysteme für Unternehmen entwickeln,
sondern nur eine kleine SQL-Datenbank benutzten, um unseren Webserver zu
unterstützen. Meist wird sogar eine table genügen. Deshalb genügt hier ein
einfacheres Entwurfssystem, das einige Forderungen der Normalisierung relativ
einfach erfüllt, das ER-Modell.
ER – Modell (entity-relationship)
Gleich am Beispiel einer Schuldatenbank gezeigt : Die Database heißt
Schule, der Entwurf beinhaltet drei tables : Lehrer, Schüler, Klassen.
Die tables werden als Rechteck oder so gezeichnet, der primary key jeweils mit einem
# davor als erster Eintrag und dann alle Attribute
(wichtig : Attribute, keine Daten !!) :
Schüler
#Schülernummer
Name
Vorname
Alter
usw…
Klassen
#Klassenbezeichner
Stammsaal
Fachrichtung
Schülerzahl
usw..
Lehrer
#Lehrernummer
Name
Vorname
Hauptfach
usw…
hier werden nun die Beziehungen (Relationen) eingetragen, und zwar als Linien
zwischen den jeweiligen Attributen :
Schüler
#Schülernummer
Name
Vorname
Klasse
usw…
Klassen
#Klassenbezeichner
Stammsaal
Fachrichtung
Lehrer
usw..
62
Lehrer
#Lehrernummer
Name
Vorname
Hauptfach
usw…
und dann werden diese Beziehungen untersucht :
1.
Frage :
Ich setze mich in die table Schüler, und blicke in Richtung Klassen.
Nun frage ich : kommt ein Element hier ( = ein Schüler) in der Zieltabelle Klassen einmal oder
öfter vor ? (Ist ein Schüler in einer oder in mehreren Klassen ?) -> Antwort : Einmal !
Diese 1 wird jetzt an der Linie am Zielelement angeschrieben :
Schüler
Klassen
1
#Schülernummer
Stammsaal
Vorname
Klasse
#Klassenbezeichner
Name
Fachrichtung
Lehrer
usw…
usw..
2. Frage :
Nun setze ich mich in die table Klassen, und blicke in Richtung Schüler.
Kommt ein Element aus meiner table in der Zieltable einmal oder öfter vor ?
Antwort : öfter ! (eine Klasse steht bei mehreren Schülern dabei)
Dieses „öfter“ wird als n (oder m) an der Zieltable angeschrieben :
Schüler
Klassen
1
#Schülernummer
Stammsaal
Vorname
Klasse
usw…
#Klassenbezeichner
Name
Fachrichtung
Lehrer
n
usw..
Diese Aussage nennt man nun Kardinalität, oben besteht eine 1:n –Kardinalität.
63
Man macht diese Untersuchung nun für alle Beziehungen, die zwischen den tables einer
database bestehen. Dabei können folgende Ergebnisse auftreten :
1:n-Kardinalität
Alles prima, das kann so bleiben !
1:1 – Kardinalität
Schlecht, ist verboten. Hier kann aber immer aus den beiden tables eine einzige gemacht
werden.
n:m – Kardinalität
Auch schlecht, auch verboten. Hier muß in der Regel eine Zwischentablelle gefunden werden,
die für eine Entkoppelung der unerlaubten Kardinalitäten sorgt.
Beispiel für n:m
Klassen
Lehrer
#Klassenbezeichner
Stammsaal
Fachrichtung
Lehrer
#Lehrernummer
Name
Vorname
Hauptfach
usw..
usw…
Die Beziehung von Lehrer und Klassen untersucht :
1. Frage : Aus Sicht von Klassen : kommt ein Element aus Klassen (die TE2b z.b) bei einem
oder bei mehreren Lehrern vor ?
Klar, es unterrichten mehrere Lehrer in der Te2b -> n !
2. Frage Aus Sicht von Lehrer : kommt ein Element aus Lehrer (z.b. der Doll) in einem
oder mehreren Klassen vor ?
Wieder klar, Doll hat Unterricht in mehreren Klassen -> m !
64
Das ist also eine n:m – Kardinalität, und die ist verboten !
Überlegen wir also eine (möglichst sinnvolle) Zwischentable, die hier für Ordnung sorgt.
Optimal wäre hier eine Liste, die irgendwie in jeder Zeile eine Beziehung zwischen den beiden
primary keys aus den ursprünglichen tables herstellt.
Ich nenne das mal „Einsatzplan“, man könnte auch einen „Stundenplan“ draus machen :
Einsatzplan
Klassen
#Klassenbezeichner
Stammsaal
Fachrichtung
Lehrer
Lehrer
#Einsatznummer
Zeit
Klasse
Lehrer
#Lehrernummer
Name
Vorname
Hauptfach
usw..
usw…
Wieder die zwei Fragen, jeweils an den Beziehungen gestellt :
Klassen -> Einsatzplan : Kommt eine Klasse im Einsatzplan öfter vor ? Ja : n !
Einsatzplan -> Klassen : Kommen in einem Einsatz eine oder mehrere Klassen vor ? Eine : 1 !
Einsatzplan -> Lehrer :
Lehrer -> Einsatzplan :
Kommen in einem Einsatz ein oder mehrere Lehrer vor ? Einer : 1 !
Kommt ein Lehrer in einem oder in mehreren Einsätzen vor ? n !
Klassen
#Klassenbezeichner 1
Stammsaal
Fachrichtung
Lehrer
Einsatzplan
n
#Einsatznummer
Zeit
Klasse
Lehrer
Lehrer
n
usw..
1 #Lehrernummer
Name
Vorname
Hauptfach
usw…
Nun ist alles in Ordnung, das ER-Modell ist korrekt ausgeführt !
IM ÜBUNGSTEIL :
Übung :
Beziehungsprobleme
IM ÜBUNGSTEIL :
Übung : Biokiste
65
IM ÜBUNGSTEIL :
Übung : Leihbücherei
SQL - Datenbank in der Praxis
1. Kontaktaufname mit dem Datenbankmonitor (der mySQL-Server muß laufen )
mysql –u <username> -p <passwort(wenn nötig)> <datenbankname (wenn schon vorhanden)>
Falls Sie in UNIX als root angemeldet sind, genügt : "mysql" als Aufruf.
Unter Windows ist –u root nötig ! Die mysql.exe finden Sie im XAMPP-Paket in /xampp/mysql/bin .
2. Jetzt kommen die Bedienbefehle.
Diese werden immer mit einem ";" abgeschlossen. Wenn das fehlt, bringt der
Monitor einen Pfeil als Eingabeaufforderung für weitere Eingaben.
CREATE DATABASE
datenbankname ; Eine neue Datenbank erzeugen. (Das geht bloß als root)
CONNECT datenbankname ; Eine Datenbank öffnen (auch wenn sie gerade erzeugt wurde)
CREATE TABLE relationsname (definition,definition,...) ;
Damit kann man nun in der Datenbank Relationen anlegen.
Beispiel :
CREATE TABLE auftrag (
nummer
INT NOT NULL AUTO_INCREMENT,
datum
DATE,
kunde
VARCHAR(30),
primary key
(nummer)
);
INT ist Integer, DATE ein Datumswert (YYYY-MM-DD), VARCHAR(n) ist n langer Text, das Attribut das
zum Primärschlüssel gemacht wird darf nie Null sein (NOT NULL), mit AUTO_INCREMENT zählt das
Sytem den Wert selber hoch.
SHOW TABLES;
zeigt alle Relationen der Datenbank an.
SHOW COLUMNS FROM table;
zeigt alle Attribute aus der Relation table an.
SELECT attribut FROM table;
zeigt alle Tupel, die zum Attribut gehören. Wenn das Attribut * gesetzt wird, zeigt es alle Einträge.
66
SELECT attribut FROM table WHERE definition;
Mit der Definition können nur Auswahlkriterien genannt werden, z.b "WHERE nummer >4".
Es gelten die üblichen Zeichen : > < = != (größer, kleiner, gleich, ungleich).
Mit AND und OR kann verknüpft werden.
DELETE FROM table; und : DELETE FROM table WHERE definition;
Damit können (ausgewählte) Einträge wieder entfernt werden
DROP TABLE
DROP TABLE <name> löscht eine Relation aus einer Datenbank
INSERT INTO
INSERT INTO <table-name> (attribut1, attribut2,....) VALUE ('wert1', 'wert2',...) fügt Werte ein
Beispiel : INSERT INTO freundin (haarfarbe, gewicht) VALUE ('blond', '56')
DELETE FROM
DELETE FROM <table-name> WHERE <bedingung>
Beispiel : DELETE FROM freundin WHERE gewicht > 60 ... alles klar ?
ALTER TABLE
ALTER TABLE <table-name> ADD <column-name> <type> fügt eine Spalte ein
Beispiel : ALTER TABLE freundin ADD vorname VARCHAR(30) ;
ALTER TABLE <table-name> DROP <column-name> löscht eine Spalte
.. damit sollte nun alles möglich sein. Natürlich gibt's noch weitere Befehle, die das Arbeiten
komfortabler machen, aber die brauchen wir momentan nicht. Sie finden komplette Befehlslisten
zuhauf im Internet.
IM ÜBUNGSTEIL :
SQL-Praxis
67
Datenbankzugriff mit PHP und SQL
Da Sie PHP und SQL jetzt beherrschen, ist der Rest simpel. Die nötigen SQL-Befehle werden
einfachb in ein PHP-Gerüst eingebaut.
Die PHP-Kernsyntax dafür sieht so aus :
$result = mysql_query(“hierher_den_sql_befehl“);
Ein Programmbeispiel, das aus unserer Freundinnendatenbank alle Namen ausliest :
<HTML>
<BODY>
<?php
mysql_connect(localhost, root);
mysql_select_db(“freundinnen“);
$result = mysql_query(“select name from freundin“);
while ($row = mysql_fetch_array($result))
{
print “<br>”;
print $row[“name”];
}
?>
</BODY>
</HTML>
68
Erklärung :
mysql_connect(localhost, root);
Diese Zeile stellt mit root-Kennung auf dem lokalen
Rechner Verbindung zur Datenbank her.
(Das geht natürlich auch über IP auf einem anderen
Rechner)
mysql_select_db(“freundinnen“); Öffnet die Database „freundinnen“.
while ($row = mysql_fetch_array($result))
Solange Werte kommen, holt die Schleife
Werte aus $result und schreibt sie in ein
Array $row.
print “<br>”;
Ausgabe beliebiger HTML-Tags in PHP, nichts neues …
print $row[“name”];
In der Schleife gelesener Wert aus $result(s.o.) wird aus dem
assoziativen Array (egal ;-) gelesen und in HTML ausgegeben.
IM ÜBUNGSTEIL :
Praxis dynamische
Websites 1
IM ÜBUNGSTEIL :
Praxis dynamische
Websites 2
IM ÜBUNGSTEIL :
Praxis dynamische
Websites 3
69
Kommunikation in Industrieanlagen
….kommt noch !
70
Herunterladen