Sie sind hier: Workshops PHP-Workshop

PHP-Workshop

PHP-Workshop Teil 2

7) Weitere Befehle zur Ablaufkontrolle

In 6) haben wir die erste Möglichkeit kennengelernt, eine Programm-Schleife zu erzeugen. Statt

$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";
$i = 0;
while ($i<10) {
echo $t;
$i++;
}

kann man auch schreiben:

$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";
$i = 0;
do {
echo $t;
$i++;
} while ($i<10);

Was ist der Unterschied?
Man bemerkt den Unterschied, wenn z.B. statt $i=0; zu Beginn $i=10; gesetzt wird. Im ersten Fall ist die Bedingung ($i<10) nicht wahr und die Befehle innerhalb der geschweiften Klammern werden nicht ausgeführt.
Im zweiten Fall werden zuerst die Befehle innerhalb der geschweiften Klammern ausgeführt, danach wird getestet, ob ($i<10). Dies ist nicht der Fall, also wird abgebrochen. D.h. aber, die Schleife wird mindestens einmal durchlaufen.

Eine weitere Möglichkeit, eine Schleife zu programmieren, ist der for-Befehl. Gleich ein Beispiel:

$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";
for ($i=0;$i<10;$i++) {
echo $t;
}

Der for-Befehl besteht aus drei Ausdrücken.

for (ausdruck1;ausdruck2;ausdruck3) { ... }

Mit ausdruck1 wird die Schleife initialisiert, d.h. normalerweise wird die Variable, die die Schleifendurchläufe zählt, auf den Anfangswert gesetzt.

ausdruck2 gibt die Abbruchbedingung an.

In ausdruck3 wird die Variable, die die Schleifendurchläufe zählt, erhöht bzw. erniedrigt.
Der for-Befehl hat den Vorteil, daß alle zur Kontrolle der Schleife nötigen Befehle in einer Zeile stehen. Ein weiteres Beispiel, diesmal wird heruntergezählt.

$t = "Ich soll meine Uebungsaufgaben selbst erstellen!<BR>\n";
for ($i=10;$i>0;$i--) {
echo $t;
}

8) Fallunterscheidungen

Zur Fallunterscheidung gibt es den if-Befehl:

if ($i<0) {
echo "$i ist kleiner als Null\n";
}

oder auch

if ($i<0) {
echo "$i ist kleiner als Null\n";
} else {
echo "$i ist nicht kleiner als Null\n";
}

Man kann diesen Befehl auch schachteln:

if ($i<0) {
echo "$i ist kleiner als Null\n";
} else if ($i>0) {
echo "$i ist groesser als Null\n";
} else {
echo "$i ist Null\n";
}

Hat man mehrere Tests der gleichen Variable, so kann man mit dem switch-Befehl evtl. Arbeit einsparen:

switch ($name) {
case "Heinrich":
echo "Ich bin der kluge Heinrich";
break;
case "Hans":
echo "Ich bin der dumme Hans";
break;
case "Agathe":
echo "Ich bin die Agathe und klüger als Heinrich und Hans";
break;
default:
echo "Wir sind der Rest";
}

Falls die Variable $name den Wert "Hans" hat, wird als nächster Befehl

echo "Ich bin der dumme Hans";

ausgeführt. Normalerweise würden dann alle nachfolgenden Befehle ausgeführt werden, u.a.

echo "Ich bin die Agathe und klüger als Heinrich und Hans";

Dies ist meist nicht erwünscht, man springt deshalb mit break aus dem switch-Befehl heraus.

9) Weitere Vergleichsmöglichkeiten

Bisher konnten wir testen, ob $i<10 oder $i>10 gilt. Es gibt aber noch mehr Möglichkeiten:

$i==10: Ist $i gleich 10?
$i!=10: Ist $i ungleich 10?
$i>=10: Ist $i größer oder gleich 10?
$i<=10: Ist $i kleiner oder gleich 10?
Man kann auch kombinieren:
($i==10) && ($j>0): Ist $i gleich 10 und $j größer als 0?
($i==10) || ($j==0): Ist $i gleich 10 oder $j gleich 0?

10) Nochmals vordefinierte Variablen

In 4) haben wir gelernt, daß in einer PHP-Datei, die aus einem Formular gestartet wird, die Namen der Formular-Elemente als Variablen zur Verfügung stehen. Dies kann man nützen, um Formular und Befehle, die das Formular behandeln, in eine einzige Datei zu schreiben:

Angenommen unsere Datei form.html enthält folgendes Formular:

<FORM ACTION="form.html" METHOD=POST>
<INPUT NAME="beliebigername">
<INPUT TYPE="submit">
</FORM>

Dann ruft sich beim Klicken auf submit die Datei selbst auf. Allerdings ist dann die Variable beliebigername beliebiger Name gesetzt. Dies können wir folgendermaßen ausnützen:

<?
if (isset($beliebigername)) {
echo "Sie haben $beliebigername eingegeben\n";
}
?>
<P>
<FORM ACTION="form.html" METHOD=POST>
<INPUT NAME="beliebigername">
<INPUT TYPE="submit">
</FORM>

Wird die Datei zum ersten Mal aufgerufen, d.h. ohne daß man auf den submit-Button klickt, so ist die Variable $beliebigername nicht gesetzt, der Ausdruck isset($beliebigername) ist also nicht wahr. Füllt man das Formular dann aus und klickt auf submit, so ist die Variable gesetzt, isset($beliebigername) ist wahr, und es wird "Sie haben $beliebigername eingegeben\n"; ausgegeben.
Will man danach abbrechen, so sollte der Befehl

exit;

verwendet werden.

11) Dateien hinzuladen

Der Befehl

include("dateiname");

liest den Inhalt der Datei dateiname so, als ob er an dieser Stelle stehen würde. Damit kann z.B. einheitliches Layout bei einer größeren Anzahl von Dateien erreicht werden.

12) Dateien lesen und schreiben

Wir wollen nun von Dateien, die auf dem Server liegen, lesen, bzw. in diese Dateien etwas hineinschreiben. Dies ist nützlich, um z.B. Zähler oder Gästebücher zu erzeugen.

Wichtig:
Aus Sicherheitsgründen ist der Webserver einem Benutzer auf dem Server-Computer zugeordnet, der sehr wenig Rechte hat. U.a. darf er nicht einfach in eine Datei in ihrem Verzeichnis schreiben. Genausowenig darf er eine Datei in Ihrem Verzeichnis erzeugen.

Um z.B. eine Datei xxx zu erzeugen, in die der Webserver schreiben darf, müssen Sie folgendermaßen vorgehen:

Verwenden Sie z.B. das Programm ws_ftp unter Windows 95 oder Windows NT, so kann man im ftp-Programm die Datei anwählen, auf die rechte Maustaste klicken und dann den Befehl chmod verwenden.
Steht der Befehl chmod nicht per Mausklick zur Verfügung, so kann man die Rechte dennoch mit einem ftp-Befehl eingeben: Der Befehl lautet

site chmod xyz DATEINAME

x, y, z sind 3 Ziffern, die die Rechte für den Datei-Eigentümer, die Benutzergruppe des Datei-Eigentümers (das sind üblicherweise alle anderen Benutzer auf dem Computer) und den Rest der Welt bestimmen. Dabei gilt:
Jede der 3 Ziffern liegt zwischen 0 und 7.
0 bedeutet: keinerlei Zugriffsrecht.
1 bedeutet: Ausführrecht (wichtig bei Programmen und Verzeichnissen).
2 bedeutet: Schreibrecht (was gleichzeitig auch "Löschrecht" ist).
4 bedeutet: Leserecht.
Der Clou an der Sache ist, daß die Zahlen addiert werden können: Will man einer Datei Lese- und Schreibrecht zuordnen, so ist die Zahl 2+4=6 anzugeben.
Beispiele:

site chmod 777 DATEINAME

gibt jedem das Recht, alles mit der Datei DATEINAME anzustellen.

site chmod 754 DATEINAME

bedeutet, der Eigentümer darf alles mit der Datei anstellen, die Gruppe des Eigentümers darf die Datei ausführen und lesen, der Rest darf die Datei nur lesen.
Achtung: Der Webserver läuft normalerweise unter "Rest", ist also weder der Eigentümer noch gehört er zur Gruppe des Eigentümers.

OK. Gehen wir davon aus, daß wir nun eine Datei mit dem Namen xxx haben, deren Inhalt wir lesen wollen.

Zuerst müssen wir die Datei öffnen, dabei muß angegeben werden, was mit der Datei geschehen soll: Wollen wir lesen, schreiben, anhängen,...
Der Befehl lautet

$datei = fopen("xxx","r");

Das heißt, wir öffnen die Datei mit dem Namen xxx und wollen darin lesen ("r"). Die technischen Details lassen wir dabei von der Variablen $datei regeln, d.h. wenn wir später aus der Datei lesen wollen, so benützen wir die Variable $datei.
Nun lesen wir zeilenweise den Inhalt der Datei, und zwar so lange, bis wir ans Ende der Datei gelangt sind:

while (!feof($datei)) {
$zeile = fgets($datei,1000);
echo $zeile;
}

feof($datei) ist wahr, sobald wir an das Datei-Ende gelangt sind. $zeile = fgets($datei,1000); liest maximal die nächsten 1000 Zeichen, hört aber auf, sobald eine neue Zeile beginnt, oder das Ende der Datei erreicht ist.
echo $zeile; gibt einfach das Gelesene wieder aus.
Schließlich muß die Datei noch geschlossen werden:

fclose($datei);

Folgende Möglichkeiten gibt es, eine Datei zu öffnen:
"r": nur lesen, begonnen wird am Dateianfang.
"r+": lesen und schreiben, begonnen wird am Dateianfang.
"w": nur schreiben. Existiert die Datei bereits, wird der bisherige Inhalt gelöscht. Existiert sie nicht, wird versucht. sie zu erzeugen.
"w+": lesen und schreiben. Ansonsten wie "w".
"a": nur schreiben. Begonnen wird am Ende der Datei (a wie append, anhängen). Existiert sie nicht, wird versucht. sie zu erzeugen.
"a+": lesen und schreiben. Ansonsten wie "a". Achtung: Es wird beim Lesen natürlich auch am Ende der Datei begonnen (dort steht natürlich nichts mehr...)
Mit dem Befehl

fwrite($datei, "Ein Text");

kann der String Ein Text in die Datei geschrieben werden.




 Zurück zu: Workshops