IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - PHP: Dateien auslesen und schreiben



PHP: Dateien auslesen und schreiben

Dieses Tutorial zeigt wie Sie mittels PHP die Inhalte von Dateien auslesen und diese neu beschreiben können. Eine Fähigkeit die sehr nützlich sein kann.


Autor: Patrick Faes (dreamer)
Datum: 17-03-2005, 19:22:50
Referenzen: siehe Text
Schwierigkeit: Fortgeschrittene
Ansichten: 76002x
Rating: 8 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



1) Einführung

Dynamische Webseiten sind eine feine Sache. Man kann damit Seiten bauen die sich bei jedem Aufruf automatisch aktualisieren. So ist es z.B. möglich eine Rangliste zu erstellen. Jedoch belastet dies den Server enorm, während es meist nicht notwendig ist die Daten bei jedem einzelnen Aufruf zu aktualisieren. Daher ist es manchmal auch besser um (sagen wir mal) jede drei Stunden eine Datei zu aktualisieren per sogenannte CronJobs, oder von Hand nach jedem Update. PHP bietet die Möglichkeit statische Dateien zu erstellen und zu speichern. Die oben angesprochene Rangliste könnte dann z.B. in einer HTML-Datei geschrieben werden und diese wird dann nachher bei einem Seitenaufruf gezeigt. Durch diese Vorgehensweise wird der Server weniger schwer belastet.

Dieses Tutorial möchte die Grundlagen dieser Technik erklären. Nachdem sollten Sie genügend Grundwissen haben um sich selbständig weiter in der Materie einzuarbeiten. Dieses Tutorial beschränkt sich zu diesem Grundwissen, da dieses Thema ganze Bücher füllen könnte. Als Nachschlagewerk ist natürlich PHP.net zu empfehlen.

2) Die Vorbereitung: Zugangsrechte einstellen

Bevor Sie anfangen mit dem lesen und/oder schreiben von Dateien mit PHP sollten Sie überprüfen ob der Server über die notwendige Zugangsrechte verfügt. Wenn dies nicht der Fall ist, wird PHP weigern die Dateien zu ändern.

Es gibt folgende Zugangsrechte: lesen, schreiben, ausf&umml;hren. Diese können einzeln eingestellt werden für User (Benutzer), Group (Anwendergruppe) und Other (Andere). Die Zugangsrechte müssen Sie in Ihren Administrationsumgebung einstellen (fragen Sie Ihrem Hoster).

Folgende Erklärung basiert auf UNIX-Servern. Wenn Sie eine andere Plattform verwenden, könnte es sein, dass Sie eine andere Schreibweise verwenden müssen. Fragen Sie in Problemfällen Ihren Hoster.

Wie oben schon angesprochen gibt es drei verschiedene Kategorien von Anwendern. Wer zu welcher Gruppe gehört, hängt davon ab wer die Datei erstellt hat:
  • User: ist der primäre Anwender. Im Normalfall auch derjenige der die Datei erstellt hat. Wenn die Datei vom Server erstellt wurde, ist PHP der User. Wenn die Datei dagegen per FTP hochgeladen wurde, sind Sie der User.
  • Group: eine Gruppe von priviligierte Anwendern (dazu gehören meist Sie und der Server).
  • Other: alle andere Anwender.
Diese können (müssen) Sie alle einzeln die Zugangsrechte vergeben. Dabei können Sie alle einzeln Zugangsrechte geben um die Dateien zu lesen, zu (be)schreiben oder auszuführen. Ich verwende hierbei die oktale Notation (fragen Sie in Problemfällen bei Ihren Hoster nach). Die oktale Notation erlaubt eine Ziffer von 0 bis 7. Die Ziffer ergibt sich aus der Summierung der einzelnen Rechte.
  • 4: darf lesen
  • 2. darf (be)schreiben
  • 1. darf ausführen
Die Ziffer die Sie angeben sollen, ergibt sich wie schon gesagt aus der Summierung der einzelnen Ziffern:
  • 0: keine Rechte
  • 1: nur Ausfühurngsrechte
  • 2: nur Schreiberechte
  • 3: Ausfühurngs- und Schreiberechte (1 + 2)
  • 4. nur Leserechte
  • 5: Ausfühurngs- und Leserechte (1 + 4)
  • 6: Lese- und Schreiberechte (2 + 4)
  • 7: alle Rechte
Wie Sie sehen können, sind damit also acht verschiedene Ziffern möglich, deshalb also der Name "oktale Notation". Sie müssen diese die Rechte für die verschiedene Gruppen einzeln angeben. Dazu schreiben Sie die Ziffern nacheinander in der Reihenfolge User-Group-Other (z.B. 644). Um spätere Fehler vor zu beugen, ist es wohl das Beste einfach alle Rechte frei zu schalten mit der Angabe 777. Keine Bange: unbefugte erhalten keinen Zugriff auf Ihre Dateien!

Anmerkung: die Zugriffsrechte können nicht nur für einzelne Dateien eingestellt werden, sondern auch für komplette Verzeichnisse.

3) Eine Datei öffnen

Die Fuktion womit man in PHP Dateien öffnet ist fopen(). Es gibt noch einige andere Funktionen dafür, jedoch lassen wir es hierbei.

Die Funktion fopen() erwartet zwei Parameter: die Adresse der zu öffnenden Datei und der Modus.

Die Adresse der zu öffnenden Datei kann absolut oder relativ angegeben werden. Eine absolute Adresse ist einfach die komplette Internetadresse im Internet worunter die Datei zu finden ist, z.B. www.it-academy.cc/datei.txt. Eine relative Adresse ist eine Internetadresse die weiter aufbaut auf die Adresse des Skripts welches ausgeführt wird. Dabei gibt es mehrere Möglichkeiten:
  1. die Datei befindet sich im selbem Ordner wie dem Skript: als Angabe der Adresse reicht der Dateiname, z.B. oeffnen.txt
  2. die Datei befindet sich in einem Ordner unter dem Ordner wo das Skript sich befindet: hierzu schreiben Sie einen Schrägstrich, den Ordnernamen, noch einen Schrägstrich und dann den Dateinamen, z.B. /Unterordner/datei.html (wenn die Datei mehrere Ordner tiefer liegt als das Skript, dann schreiben Sie einfache mehrere Ordnernamen, jeweils getrennt durch einen Schrägstrich, z.B. /Unterordner1/Unterordner2/datei.html)
  3. die Datei befindet sich in einem Ordner überhalb des Skripts: um die Datei zu erreichen schreiben Sie zwei Punkte und einen Schrägstrich (../) womit Sie dann einen überliegenden Ordner erreichen können. Ein komplettes Beispiel könnte so aussehen: ../lesen.txt. Wenn Sie eine Datei erreichen wollen die mehrere Ordner über dem Skript liegt, dann schreiben Sie einfach soviele Punkte und Schrägstriche wie er Ordner gibt. Ein Beispiel mit drei Ordner: ../../../Lesen.html
  4. die Datei befindet sich in einem anderen Ordner auf derselben Ebene: ein Beispiel: das Skript befindet sich auf www.it-academy.cc/Ordner/Unterordner1/Skript.php und die Datei die Sie öffnen wollen auf www.it-academy.cc/Ordner/Unterordner2/Datei.html. Um diese Datei zu öffnen müssen Sie erst einen Ordner zurückgehen und dann den anderen Unterordner öffnen, z.B.: ../Unterordner2/Datei.html
Fopen() hat folgende Modi zur Verfügung:
'r'- Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.
- Wenn die Datei nicht existiert, kann sie nicht geöffnet werden.
'r+'- Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.
- Wenn man nachher etwas in der Datei schreibt, wird der neue Inhalt vor dem aktuellen Inhalt eingefügt.
- Wenn die Datei nicht existiert, kann sie nicht geöffnet werden.
'w'- Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte.
- Existierende Inhalte werden restlos gelöscht.
- Wenn die Datei nicht existiert wird versucht sie anzulegen.
'w+'- Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte.
- Existierende Inhalte werden in einer Variable gespeichert und in der Datei gelöscht.
- Wenn die Datei nicht existiert, wird versucht sie anzulegen.
'a'- Öffnet die Datei nur zum Schreiben. Positioniert den Dateizeiger auf das Ende der Datei.
- Wenn die Datei nicht existiert, wird versucht sie anzulegen.
'a+'- Öffnet die Datei zum Lesen und Schreiben. Positioniert den Dateizeiger auf das Ende der Datei.
- Neue Inhalte werden am Ende der Datei hinzugefügt.
- Wenn die Datei nicht existiert, wird versucht sie anzulegen.
'x'- Lege eine Datei an und öffne sie nur zum Schreiben. Wenn die Datei schon existiert, wird fopen() FALSE zurückgeben. Diese Option wird unterstützt ab PHP 4.3.2 und funktioniert nur für lokale Dateien.
'x+' Lege eine Datei an und öffne sie zum Lesen und Schreiben. Wenn die Datei schon existiert, wird fopen() FALSE zurückgeben. Diese Option wird unterstützt ab PHP 4.3.2 und funktioniert nur für lokale Dateien.


Um dann später die Dateien auslesen oder (über)schreiben zu können, müssen Sie die Verbindung in eine Variable speichern.
$verbindung = fopen('datei.html','r');
Am Ende, nachdem Sie die Dateien ausgelesen und/oder (über)schrieben haben, müssen Sie die Datei auch schließen weil ansonsten der Server zu schwer belastet werden kann.
fclose($verbindung);
Anmerkungen:
  • Um vorab zu überprüfen ob es eine bestimmte Datei oder ein bestimmtes Verzeichnis schon gibt, verwenden Sie die Funktion file_exists()
  • Um ein Verzeichnis anzulegen, verwenden Sie die Funktion mkdir()
  • Es ist möglich um den Modus zu erweitern mit dem binären oder dem Textmodus. Jedes Betriebssystem verwendet eine eigene Schreibweise für Zeilenumbrüche in Textdateien: \n (Linux), \r (Mac) und \r\n (Windows) sind die Möglichkeiten. Wenn der Textmodus verwendet wird, werden in Windows die Zeilenumbrüche (\r\n) ersetzt durch \n, im binären Modus nicht. Das kann zu Kompatibilitätsprobleme führen. Der Unterschied ist nur für Windows-Servern wichtig. Um es zu verwenden, ergänzen Sie den Modus um den Buchstaben t für Textmodus (z.B. rt), bzw. um den Buchstaben b für binärer Modus (z.B. w+b)
  • Wenn Sie den Namen der Datei dynamisches zusammenstellen möchten, müssen Sie dieser vorab in einer Variable speichern, z.B. $datei = 'datei'.'.html'; fopen($datei,'r')
  • Sie können verschiedene Textformate verwenden, wie z.B. HTML und TXT. Für PDF aber sollten Sie die PDF-Funktionenverwenden. Proprietäre Formate wie z.B. DOC (Microsoft Word) sind nur beschränkt zugägnglich.
  • Wenn Sie ein Stück PHP-Code einfügen wollen, verwenden Sie die Funktion include() anstatt diese File-Funktionen. Sie können allerdings ganze PHP-Seiten dynamisch erstellen (dazu müssen die Seiten aber auch die PHP-Tags >?php und ?> beinhalten.
4) Inhalte auslesen und schreiben

Das Auslesen der Dateien macht man einfacherweise mit fread() (es gibt mehrere Möglichkeiten, aber so weit gehen wir in diesem Tutorial nicht). Die Funktion erwartet zwei Parameter: die Verbindung zu einer bereits geöffnete Datei und die Anzahl der Bytes die ausgelesen werden sollen. Die Verbindung wird angegeben mit der Variable worin sie gespeichert wurde. Die Anzahl der auszulesenden Bytes muss auch angegeben werden. So kann man dies z.B. beschränken zu 60 Bytes. Dazu geben Sie die Zahl 60 an, keine weitere Angaben.
$fread($verbindung, 60);
Wenn Sie der ganze Inhalt der Datei auslesen möchten, müssen Sie immer die Größe der Datei angeben. Da dies sehr umständlich sein kann (besonders bei Dateien mit variierenden Inhalten), steht Ihnen die Funktion filesize() zur Verfügung. Diese Funktion speichert die Dateigröße.
$inhalt = fread($verbindung, filesize('datei.html'));
Sie sehen hier auch, dass der Inhalt der Datei in der Variable $inhalt gespeichert wird. Dies ist wichtig wenn Sie die Daten verwenden möchten und eventuell später wiederverwenden möchten.

Inhalte in einer Datei zu schreiben ist recht einfach, beachten Sie allerdings den Modus mit welchem die Datei geöffnet wurde (siehe weiter oben). Die Funktion fwrite() erwartet zwei Parameter: die Verbindung (wurde geöffnet mit fopen()) und den Inhalt welcher in der Datei geschrieben werden muss.
fwrite($verbindung, $inhalt);
Ein komplettes Beispiel könnte so aussehen:
<?php
$verbindung = fopen('datei.txt', 'w');
$inhalt = fread($verbindung, filesize('datei.txt');
fwrite($verbindung, $neuer_inhalt);
fclose($verbindung);
?>


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04511
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06248
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0