Informatik :: PHP + MySQL :: Fremde Dateien in PHP

Fremde Dateien in PHP

[einbinden] [lesen / schreiben]

  Aufgaben (Gästebuch)

[1] [2] [3]

Dateien einbinden

Es gibt zwei Möglichkeiten, den Inhalt einer anderen Datei in eine php-Datei einzubinden.

1. Möglichkeit - Funktion include()

        include("datei.inc");

Der Inhalt der Datei datei.inc wird eingelesen und ausgeführt - so, als ob diese Datei allein aufgerufen werden würde.
Sinnvollerweise sollte die eingebundene Datei im Browser ausführbaren Code enthalten.
Der Name der include-Datei (einschließlich der Extension) kann frei gewählt werden.

2. Möglichkeit - Funktion require()

        require("datei.inc");

Auch hier wird der Inhalt der Datei datei.inc eingelesen, aber diesmal so, als ob er an genau dieser Stelle des Quelltextes stehen würde.

Hinweis:

Falls es nicht sicher ist, ob die Datei wirklich existiert (denn dann käme eine Fehlermeldung), kann man das mit der Funktion file_exists("dateiname") einfach prüfen.

Beispiel:

     if (file_exists("datei.inc")) {
          require("datei.inc");
     }
     else
     {
          echo "Datei nicht vorhanden";
     }

Seitenanfang

Dateien lesen / schreiben

Mittels PHP kann man vorhandene Dateien (die natürlich auf dem entfernten Webserver liegen und Text enthalten) lesen und neuen Text in die Datei schreiben.
Somit können Nutzerdaten (z.B. Einträge in ein Gästebuch) gespeichert und wieder abgerufen werden.

1. Schritt: Datei öffnen

Um mit einer Datei zu arbeiten (Lesen des Inhaltes oder Ändern des Inhaltes) muss die Datei zunächst geöffnet werden.
Dazu verwendet man die PHP-Funktion fopen("dateiname","zugriffsart").

Folgende Zugriffsarten stehen dabei zur Verfügung:
Zugriffsart Beschreibung
r nur lesend, beginnend am Dateianfang
r+ lesend und schreibend, beginnend am Dateianfang
w nur schreibend, die Datei wird neu erzeugt, existiert sie bereits, wird der bisherige Inhalt gelöscht
w+ lesend und schreibend. Ansonsten wie "w"
a nur schreibend. Begonnen wird am bisherigen Dateiende (a wie append = anhängen).
Existiert sie nicht, wird versucht, sie zu erzeugen
a+ lesend und schreibend. Ansonsten wie "a". Achtung: Beim Lesen steht am Ende der Datei nichts mehr

Beispiele:

Die Datei daten.dat soll nur zum Lesen ab Dateianfang geöffnet werden. fopen("daten.dat","r")
Die Datei nutzer.dat soll lesend und schreibend geöffnet werden.
Falls die Datei nicht vorhanden ist, soll sie erzeugt werden.
Ist sie bereits vorhanden soll der bisherige Inhalt gelöscht werden.
fopen("nutzer.dat","w+")
Die Datei nutzer.dat soll lesend und schreibend geöffnet werden.
Falls die Datei nicht vorhanden ist, soll sie erzeugt werden.
Ist sie bereits vorhanden soll der neue Inhalt am bisherigen angehangen werden.
fopen("nutzer.dat","a+")

Im Erfolgsfall gibt die Funktion fopen("dateiname","zugriffsart") einen Dateizeiger (z.B. Resource id #3) zurück.
Sollte das Öffnen der Datei scheitern, so wird nichts zurückgegeben.
Dieser Dateizeiger ist für die weitere Arbeit mit der Datei notwendig. Deshalb wird er in einer PHP-Variablen gespeichert.
Damit ergibt sich die erste Anweisung:

$f=fopen("dateiname","zugriffsart")

2.1 Datei lesen

Will man eine vorhandene Datei (muss nicht geöffnet sein) vollständig lesen,
dann verwendet man am einfachsten die PHP-Funktion readfile("dateiname")

Für das Lesen einer bereits geöffneten Datei stehen u.a. folgende PHP-Funktionen zur Verügung:
PHP-Funktion Beschreibung
fgetc(dateizeiger) Damit kann man aus einer geöffneten Datei ein einzelnes Zeichen von der aktuellen Position des Dateizeigers auslesen.
Diese Funktion gibt false zurück, falls der Dateizeiger am Ende der Datei steht und deshalb nicht mehr auf ein gültiges Zeichen verweist.
fgets(dateizeiger,length) Damit kann man aus einer Datei eine Zeile mit der Länge length (in Byte) auslesen.
Sollte die Zeile länger sein als der in length vorgegebene Wert, so wird die Zeile bis zur angegebenen Länge gelesen und der Rest abgeschnitten.
Kommt es beim Lesen der Datei zu einem Fehler, so wird false zurückgeliefert.
file_get_contents("dateiname") Damit kann man aus einer Datei den gesamten Inhalt auslesen.
Kommt es beim Lesen der Datei zu einem Fehler, so wird false zurückgeliefert.

Weitere PHP-Funktionen zum Lesen in einer Datei findest du hier.

Auch für das Lesen in einer Datei empfiehlt sich wieder eine PHP-Variable, in der entweder der gelesene Dateiinhalt oder false steht.
Also z.B.:

$inhalt=file_get_contents("datei.txt")

2.2 In Datei schreiben

Für das Schreiben in eine bereits geöffneten Datei steht die PHP-Funktion fwrite(dateizeiger,"zu_schreibender_Text",length) zur Verügung.
Der Parameter length ist dabei optional und bedeutet, dass nur maximal so viele Zeichen geschrieben werden.
Also z.B.:

fwrite($f,"<b>Hallo!</b>")
schreibt <b>Hallo!</b> in eine geöffnete Datei.

3. Schritt: Datei schließen

Um eine noch geöffnete Datei wieder zu schließen verwendet man die PHP-Funktion fclose(dateizeiger)

Zusammenfassung (Beispiel)

Der Inhalt der Datei nutzer.dat soll zunächst gelesen, anschließend der Text "Alter=18" angefügt und erneut vollständig gelesen werden.

        $zeiger = fopen("nutzer.dat","a+");
        while (!feof($zeiger)) {
                $zeile = fgets($zeiger,120);
                echo $zeile;
        }
        $text="Alter=18";
        fwrite($zeiger,$text);
        fclose($zeiger);
        echo "<br>";
        readfile("nutzer.dat");

Seitenanfang

Aufgabe 1

Erstelle die Datei book1.php, die folgende Seite generiert:

Hinweise:

  1. Überschrift und Formular in HTML. Dabei ist zu beachten:
    - das Formular muss sich selbst aufrufen -> action="<?php echo $PHP_SELF; ?>"
    - Formularelemente: mehrzeiliges Textfeld (name="meinung") und Submit-Button
  2. PHP-Code:
    - Test, ob Wert ($_POST["meinung"])gesendet wurde
      Falls ja:-> Textdatei (book1.txt) so öffnen, dass am bisherigen Dateiende mit dem Schreiben begonnen werden kann. Der Dateizeiger wird einer Variablen ($f) übergeben.
      -> Neue (gepostete) Meinung in die Datei schreiben.
  3. als h2: "Meinungen, die bereits geschrieben wurden:"
  4. als h3 und in blau: Textdatei lesen mittels PHP!

Seitenanfang

Aufgabe 2

Erstelle die Datei zaehler.php, die folgenden Zähler generiert:

Hinweise:

  1. Deklaration einer PHP-Funktion zaehle(), die folgendes bewirkt:
    - Speichern des Namens der Textdatei (zaehler.txt), die den Zählerstand speichert, in einer PHP-Variablen ($zaehldatei)
    - Test, ob die Zähldatei vorhanden ist
    - falls ja:
      -> Zähldatei lesend und schreibend, beginnend am Dateianfang öffnen. Der Inhalt muss einer Variablen übergeben werden ($f).
      -> Lesen der ersten 6 Zeichen der Zähldatei und Übergabe des Wertes an eine Variable (nennen wir sie $zaehler)
      -> Erhöhen des Zählers um 1
      -> Zurücksetzen des Dateizeigers auf das erste Byte der Zähldatei: rewind("Dateiname")
    - falls nein:
      -> neue Zähldatei erstellen und zum Schreiben öffnen
      -> Zählvariable auf "1" setzen
      -> Schreiben des neuen Zählerstandes in die Zähldatei
      -> Zähldatei schließen
    - Wert der Zählvariablen ausgeben
  2. HTML-Teil:
    - als h1: "Zähler"
    - als Absatz: "Der aktuelle Zählerstand ist:"
    - fett: Ausgabe des Rückgabewertes der PHP-Funktion zaehle() mittels PHP!
    - Verweis: "Startet das Script zur Erhöhung des Zählers" -> <a href="<? echo $PHP_SELF ?>">

Seitenanfang

Aufgabe 3

Erstelle die Datei book2.php, die die Aufgaben 1 und 2 verbindet:

Hinweise:

  1. Die Funktion zaehle() schreibt die Zählvariable in die Zähldatei
  2. Aufruf der Funktion zaehle() beim Schreiben in die Gästebuch-Datei (gast.txt)

Seitenanfang