Homepage-Webhilfe Event-Banner

Dateizugriffe

In diesem Thema wollen wir uns damit beschäftigen, wie Sie mit Dateien arbeiten können. Hierzu zählt das Lesen, Schreiben und Anhängen von / an Dateien sowie das Einbinden von Dateien, um Quellcode auszulagern. In den Beispielen der Unterthemen Dateiinhalt einlesen und Arbeiten mit Datei-Handles wird die folgende Text-Datei verwendet (Zeilenumbruch mittels \r\n):

Wichtig: Die Datei dient nur zum Test.

Diese Datei enthält ein paar Zeilen 
mit "reinem" Text.
Verwendet wird die Datei mit 
verschiedenen PHP-Funktionen.

Zur Erinnerung: Die Datei dient nur zum Test.

Möchten Sie prüfen, ob eine Datei existiert, so können Sie die Funktion file_exists() aufrufen, welcher als Parameter der Dateiname mit Pfad übergeben wird und als Rückgabe ein Wert vom Typ Boolean zurückgibt. Die Funktion filesize() erlaubt es, die Dateigröße einer Datei zu ermitteln. Als Parameter wird der Dateiname übergeben und als Rückgabewert erhalten Sie die Dateigröße oder false im Fehlerfall.


Möchten Sie den kompletten Inhalt einer Datei einlesen, so können Sie die Funktion file_get_contents() verwenden. Als Parameter übergeben Sie dieser den Dateinamen mit Pfad. Die Pfadangabe kann relativ oder absolut sein. Des Weiteren ist es möglich, eine URL anzugeben, um z. B. den Inhalt einer anderen Seite zu laden. Die Funktion file_get_contents() gibt als Rückgabewert eine Zeichenkette zurück. Schlägt das Auslesen der Datei fehl, so wird false zurückgegeben. Im folgenden Beispiel wird eine Datei eingelesen, an den Zeilenumbrüchen getrennt und anschließend alle Zeilen nacheinander ausgegeben:

<?php
$inhalt = file_get_contents('datei-beispiel.txt');

$zeilen = explode("\r\n", $inhalt);

foreach ($zeilen as $zeile)
	echo $zeile.'<br />';
?>
Vorschau

Wollen Sie nur einen Teil einer Datei auslesen oder in eine Datei schreiben, so müssen Sie Datei-Handles verwenden. Ein Handle (zu Deutsch Griff oder Henkel) ist eine Referenz auf eine Ressource (in diesem Fall eine Datei) des Systems. Um ein Datei-Handle zu erhalten, müssen wir die Funktion fopen() aufrufen, welche eine Datei öffnet. Der Funktion fopen() werden der Dateiname (ggf. mit Pfad) und ein Modus übergeben. Für den Modus sind einige Kürzel verfügbar, welche Sie bitte der folgenden Tabelle entnehmen:

Kürzel Lesen Schreiben Dateizeiger Dateiinhalt Datei
r ja nein Anfang - -
r+ ja ja Anfang - -
w nein ja Anfang alter Inhalt wird überschrieben wird ggf. erstellt
w+ ja ja Anfang alter Inhalt wird überschrieben wird ggf. erstellt
a nein ja Ende neuer Inhalt wird angehängt wird ggf. erstellt
a+ ja ja Ende neuer Inhalt wird angehängt wird ggf. erstellt

Die Funktion fopen() gibt einen Datei-Handle oder false zurück, wenn ein Fehler auftritt. Hier ein Beispiel für den Aufruf der Funktion fopen():

<?php
$handle = fopen('datei-beispiel.txt', 'r')
?>

Um aus einer Datei (mittels Datei-Handle) zu lesen, gibt es die Funktion fread(). Der Funktion fread() werden das Datei-Handle und die Anzahl der zu lesenden Bytes übergeben. Die Funktion gibt eine Zeichenkette oder im Fehlerfall false zurück.

<?php
$daten = fread($handle, 20);
?>

Das Schreiben in eine Datei erfolgt mittels der Funktion fwrite(). Der Funktion werden das Datei-Handle, eine Zeichenkette und optional die Anzahl der zu schreibenden Bytes übergeben. Wird die Anzahl der zu schreibenden Bytes nicht mit übergeben, so wird die Länge der Zeichenkette bestimmt und diese als Längenangabe verwendet. fwrite() gibt die Anzahl der geschriebenen Bytes oder im Fehlerfall false zurück.

<?php
$len = fwrite($handle, $daten);
?>

Die Funktion ftell() ermöglicht es, die aktuelle Position in dem Datei-Handle, den sogenannten Dateizeiger, zu ermitteln. Als Rückgabe erhalten Sie die Position in der Datei (Dateianfang entspricht der Position 0). Schlägt die Funktion fehl, so wird false zurückgegeben.

<?php
$pos = ftell($handle);
?>

So wie der Dateizeiger ausgelesen werden kann, kann der Dateizeiger auch gesetzt werden. Hierfür wird die Funktion fseek() verwendet, welcher das Datei-Handle und die Dateiposition übergeben werden muss.

<?php
fseek($handle, 40);
?>

Möchten Sie prüfen, ob sich der Dateizeiger am Ende befindet, so können Sie die Funktion feof() aufrufen.

<?php
$ende = feof($handle);
?>

Sobald Sie mit einem Datei-Handle fertig sind und es nicht mehr benötigen, sollten Sie es wieder schließen. Hierfür verwenden Sie die Funktion fclose().

<?php
fclose($handle);
?>

Im folgenden Beispiel wird ein Teil der Datei ausgelesen und ausgegeben. Zusätzlich wird, bevor die Datei geschlossen wird, die Position des Dateizeigers ausgegeben:

<?php
$handle = fopen('datei-beispiel.txt', 'r');

fseek($handle, 42);
echo str_replace("\r\n", '<br />', fread($handle, 118));

echo '<br /><br />Position: '.ftell($handle);

fclose($handle);
?>
Vorschau

Wenn Sie Funktionen oder Objekte in mehrere Dateien aufteilen wollen, so müssen Sie die Möglichkeit haben, Dateien einzubinden. Eingebundene Dateien müssen nicht zwingend PHP-Code enthalten, sondern können z. B. auch nur HTML-Code enthalten. Befindet sich in der Datei PHP-Code, so wird dieser vom PHP-Interpreter ausgeführt. Insgesamt gibt es für das Einbinden vier verschiedene sogenannte Sprachkonstrukte: include, include_once, require und require_once. Bei allen Sprachkonstrukten wird nach dem jeweiligen Schlüsselwort der Dateiname mit Pfad (Zeichenkette) und einem abschließenden Semikolon angegeben. Bei allen vier Sprachkonstrukten ist auch eine alternative Schreibweise wie bei Funktionen möglich.

<?php
include 'datei2.php';
include('datei2.php');  // Entspricht der obigen Zeile
?>

Der Sprachkonstrukt require verhält sich fast identisch wie include, nur mit dem Unterschied, dass wenn die angegebene Datei nicht gefunden wurde oder ein Zugriff auf die Datei nicht möglich ist, ein fataler PHP-Fehler ausgelöst wird. Das Gleiche gilt für require_once im Verhältnis zu include_once. Die Befehle include_once und require_once entsprechen include und require mit dem Unterschied, dass geprüft wird, ob die angegebene Datei bereits eingebunden wurde. Ist dies der Fall, so wird der Befehl ignoriert.

<?php
require 'datei-einbinden-2.php';

echo $a * $b;
?>

datei-einbinden-2.php:

<?php
$a = 7;
$b = 4;
?>
Vorschau
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK