|
T u t o r i a l
|
|
PHP Tutorial > Kapitel 7: Dateien
Antworten zu Fragen aus Kapitel 6:
1. Wie fügt man PHP Scripte ineinander ein?
Mit dem "include"-Befehl.
2. Wozu benutzt man MD5?
Um Zeichenketten zu verschlüsseln.
3. Wozu benutzt man Funktionen?
Zur Übersicht und Vermeidung vom mehrfach schreiben desselben Codes.
Eine Datei
Wozu kann man Dateien einsetzen? Wenn Du zum Beispiel ein PHP Spiel entwickelst und es
ohne Datenbank machen möchtest kannst Du Spieledaten, Benutzerdaten und anderes
in mehreren Dateien festhalten. PHP bietet einzigartige Möglichkeiten dazu.
Eine Resource
Eine Resource ist in PHP eine Variable die den Hinweis auf eine Verbindung
zu einer Datei oder Stelle im System zeigt. Wenn man diese Variable mit "echo"
ausgibt, bekommt man nur "Resource ID #23" zurück. Man bekommt eine Resource
wenn man jetzt zum Beispiel eine Datei öffnet. Wenn man etwas mit dieser Datei
anfangen möchte, gibt man die Resource an die nächste Funktion. Man sollte nie Resourcen offen lassen. Es gibt immer eine "close"
Funktion.
Dateien öffnen und lesen
Tutorial_Kapitel7_Beispiel_1.dat:
Luky||wuha||luky@lukydeluxe.org||17||Österreich
|
Tutorial_Kapitel7_Beispiel_1.php:
<?php
$fp = fopen("Tutorial_Kapitel7_Beispiel_1.dat", "r"); $content = fread($fp, filesize("Tutorial_Kapitel7_Beispiel_1.dat")); fclose($fp);
$array = explode("||", $content);
echo "Hahah ich weiß Lukys Passwort, es ist: ".$array[1];
// Ausgabe: "Hahah ich weiß Lukys Passwort, es ist: wuha"
?>
|
Mit fopen() wird in diesem Beispiel
die älteste Methode von PHP benutzt um eine Datei auszulesen.
$fp ist die Resource die bei jeder weiteren Funktion weitergegeben wird.
Als zweite Angabe bei fopen() gebe ich "r"
an. "r" steht für read-only.
Für weitere Optionen sehe dir die Funktionsdokumentation an.
Wenn du nun mehr Daten in einer Datei haben möchtest die zum Beispiel
mehrere User beinhaltet trennt man meistens mit Zeilenumbrüchen.
Tutorial_Kapitel7_Beispiel_2.dat:
Luky||wuha||luky@lukydeluxe.org||17||Österreich Ferdinand||muh||ferd@lukydeluxe.org||24||Deutschland Hans||flo99||hans@lukydeluxe.org||12||Schweiz
|
Tutorial_Kapitel7_Beispiel_2.php:
<?php
$data = file("Tutorial_Kapitel7_Beispiel_2.dat"); $user = array(); $alter = array();
for($i=0;$i<sizeof($data);$i++) { $user[$i] = explode("||", $data[$i]); $alter[$i] = $user[$i][3]; }
arsort($alter);
foreach($alter as $key => $value) { echo $user[$key][0]." ist ".$value." Jahre alt und kommt aus ".$user[$key][4].""; }
?>
|
Wie Du in "Tutorial_Kapitel7_Beispiel_2.dat" siehst, werden einzelne User mit
Zeilen getrennt. Die Funktion file()
ermöglicht dir eine Datei auszulesen und gibt das Ergebnis in einem Array
zurück. Jedes Array Element ist eine Zeile.
Dreidimensionales Array
In diesem Beispiel siehst Du zum ersten mal ein Array in dem ein weiteres
Array ist. "$array[0][0] zum Beispiel". Das nennt man ein dreidimensionales
Array. Dies kommt zustande wenn du in ein Array ein weiteres Array anlegst.
$meinarray[0] = array("Muh");
echo $meinarray[0][0];
Ergibt "Muh".
Funktion explode() gibt auch ein Array
zurück deshalb steht im Arrayelement $user[0][3] die Zahl 17.
Wieso ist nun alles um eine Zahl nach hinten verschoben? Ein Array beginnt mit
dem Element "0". Somit ist 0 die erste Stelle also zum Beispiel "Luky". 1 wäre
dann "wuha":
0 1 2
3 4 Luky||wuha||luky@lukydeluxe.org||17||Österreich
Ich erstelle ein zusätzliches Array namens "Alter" da ich die Benutzer nach
dem Alter sortieren möchte. Also besitzt nun $alter[0] das Alter von $user[0].
Der Schlüssel ist somit gleich und ich kann $alter mit arsort()
Sortieren ohne die Schlüssel zu verlieren.
Die Foreach-Schleife gibt uns nun die Benutzer in der gewünschten Reihenfolge
zurück. In $key wird 0, 1 oder 2 gesetzt, da wir nur 3 User haben.
$value ist das Alter. Wenn man nun den $key bei $user einsetzt, kann man alle
weiteren Daten des Benutzers anzeigen lassen.
file_get_contents()
Tutorial_Kapitel7_Beispiel_3.dat:
The quick brown fox jumps over the lazy dog. La La Lo.
The quick brown fox jumps over the lazy dog. La La Lo.The quick brown fox jumps over the lazy dog.
La La Lo.The quick brown fox jumps over the lazy dog. La La Lo.The quick brown fox jumps over the lazy dog.
La La Lo.The quick brown fox jumps over the lazy dog.
La La Lo.
|
Tutorial_Kapitel7_Beispiel_3.php:
<?php
echo file_get_contents("Tutorial_Kapitel7_Beispiel_3.dat");
?>
|
Diese Funktion tut genau dasselbe wie fopen()
und kann viel schneller "geschrieben" werden.
Dateien modifizieren / speichern
Da wir jetzt Dateien "lesen" können, sollten wir auch etwas in sie
speichern.
Wie wäre es mit einem einfachen Registrierungsscript?
Tutorial_Kapitel7_Beispiel_4.php:
<?php
function filter($string) // String filter(String $string) { $string = strip_tags($string); // Gegen HTML Code $string = str_replace("||", "", $string); $string = str_replace("\n", "", $string); // Zeilenumbruch $string = str_replace("\r", "", $string); // Zeilenumbruch return $string; }
if($_POST["abschicken"] == "") { ?> Registriere dich um ein gratis Eis zu erhalten!! <form method="POST" action="Tutorial_Kapitel7_Beispiel_4.php"> <input type="hidden" name="abschicken" value="1"> Username: <input type="text" name="username"> Passwort: <input type="password" name="passwort"> Email: <input type="text" name="email"> Alter: <select name="alter"> <?php for($i=12;$i<91;$i++) { echo "<option value=\"".$i."\">".$i."</option>"; } ?> </select> Land: <input type="text" name="land"> <input type="submit" value="Abschicken"> </form> <?php } else { $username = filter($_POST["username"]); $passwort = filter($_POST["passwort"]); $email = filter($_POST["email"]); $alter = filter($_POST["alter"]); $land = filter($_POST["land"]); if(strlen($username) > 2 && strlen($username) < 25 && strlen($passwort) > 4 && strlen($passwort) < 25 && strlen($email) > 6 && strlen($email) < 50) { $fp = fopen("Tutorial_Kapitel7_Beispiel_2.dat", "a+"); fwrite($fp, $username."||".$passwort."||".$email."||".$alter."||". $land."\n"); fclose($fp); echo "Danke für die Registrierung! Das Eis wird am nächsten Arbeitstag geliefert!"; } else { echo "Leider sind einige Felder nicht ausgefüllt oder nicht richtig ausgefüllt. <a href=\"JavaScript:history.back()\">[<<] Zurück</a>"; } }
?>
|
Wenn das Formular ausgefüllt wurde und abgeschickt wurde, öffne ich
"Tutorial_Kapitel7_Beispiel_2.dat" mit fopen()
zum schreiben. "a+" legt fest, dass am Ende der Datei geschrieben wird.
Mit fwrite() schreibe ich nun die
gewünschten Daten in die Datei und trenne die User mit einem Zeilenumbruch.
Ein Zeilenumbruch ist für PHP "\n"
Wenn ein bösartiger User versucht, einen Zeilenumbruch in die Emailadresse
oder in den Usernamen einzuschleusen, habe ich eine Funktion (ganz oben)
erstellt, die diesen User aufhält Schaden anzurichten.
file_put_contents()
(Ab PHP 5)
Tutorial_Kapitel7_Beispiel_5.php:
<?php
$username = "Maxi"; $passwort = "blablala"; $email = "maxi@lukydeluxe.org"; $alter = 15; $land = "Frankreich";
file_put_contents("Tutorial_Kapitel7_Beispiel_2.dat", file_get_contents("Tutorial_Kapitel7_Beispiel_2.dat").$username. "||".$passwort."||".$email. "||".$alter."||".$land."\n");
?>
|
file_get_contents() und
file_put_contents() sind die
Schnellschreibweisen für den Umgang mit Dateien.
Weiters kann man mit file_get_contents()
einfach URLs "aussaugen":
Tutorial_Kapitel7_Beispiel_6.php:
<?php
echo file_get_contents("http://www.lukydeluxe.org");
?>
|
Fragen zu diesem Kapitel:
1. Was ist eine Resource?
2. Welche Funktion kann man benutzen, um eine Datei zu "öffnen".
3. Was macht fread()?
4. Sind file_get_contents() und
file_put_contents() durch
andere Funktionen ersetzbar?
Antworten in Kapitel 8
Alle Beispiele von Kapitel 7
|
|
|