Luky.cc NetworkLuky.cc NetworkLuky.cc Network - AutoDetectLuky.cc Network - AutoDetectEinloggenLuky.cc Network - AutoDetect

LukyDeluxe8 1.0 
dAxEngine 1.0 powered 

LukyDeluxe8

LukyChat

LukyThoughts

PHP

MySQL

CS: S

Service

 

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
E
ine 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
D
a 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





 

Navigation «
 

Einführung
Basiswissen / HTML
Tutorial
Codeschnipsel
Links

Sitemap

LD unterstützen «
 

 

Developed by dAxpHpNIzER™
Copyright © Lukas Wojcik 2002 - 2021. Alle Rechte vorbehalten. AGB

 

Extesizer.at