Teil von  SELFPHP   Teil von  Praxisbuch  Teil von  Dateisystem via PHP
Letztes Update: 16.08.2005 17:53:45


Navigation

Seite News *

Seite Startseite
Seite Über SELFPHP
Seite Werbung
Seite Kontakt
Seite Forum *
Seite PHP-Skripte
Seite PHP Befehlsreferenz
Seite PHP5 Praxisbuch
Seite Gratis-Videolektionen*
Seite Download *
Seite SELFPHP Banner *
Seite SELFPHP in Buchform
Seite Newsletter *
Seite Impressum

Seite Anbieterverzeichnis

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  

 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 79.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 



 

Lesen und Schreiben von Dateien




Um eine Datei zu öffnen, benötigen Sie die Funktion fopen(). Diese erwartet zwei Argumente:
. Name der Datei
. Dateiattribut

Die Funktion liefert als Rückgabewert einen Verweis (Handle) auf die Datei. Diesen Verweis benötigen Sie für Lese- und Schreiboperationen, beispielsweise in Verbindung mit fread().


Beispiel



<?php

$datei 
fopen("info.txt","r");
echo 
fread($datei,1000);
fclose($datei);

?>



oder



<?php

// Fehlermeldung wird unterdrückt und die eigene angezeigt
@$datei fopen("info.txt","r") or die("Kann info.txt nicht öffnen!");
echo 
fread($datei,1000);
fclose($datei);

?>



Das Dateiattribut, welches sich im zweiten Argument der fopen() Funktion befindet, ist "r" und stellt die Datei lediglich zum Lesen zur Verfügung.

In der folgenden Tabelle haben wir Ihnen die zur Verfügung stehenden Modis aufgelistet:


Modus Bedeutung
r Öffnet die Datei nur zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.
r+ Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.
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. 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. 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. Wenn die Datei nicht existiert, wird versucht sie anzulegen.


Sie sollten vor allem auf die Angaben "w" und "w+" achten. Damit sind Sie in der Lage Dateien zu löschen oder zu erzeugen. Die Angabe "a" (append) sollten Sie verwenden, wenn Sie an eine bereits bestehende Datei weitere Daten anhängen wollen.

Wir haben Ihnen eine weitere Tabelle zusammengestellt, die Ihnen die Entscheidung, welcher Modus es beim verarbeiten von Dateien sein soll, erleichtert:


Modus Lesbar? Schreibbar? Dateizeiger Kürzen? Erzeugen?
r Ja Nein Anfang Nein Nein
r+ Ja Ja Anfang Nein Nein
w Nein Ja Anfang Ja Ja
w+ Ja Ja Anfang Ja Ja
a Nein Ja Ende Nein Ja
a+ Ja Ja Ende Nein Ja



Dateien von einem entfernten Server

Sollten Sie Dateien von einem entfernten Server öffnen wollen, zu der Sie via HTTP oder FTP Zugang haben, dann können Sie hierfür ebenfalls fopen() einsetzen:

$datei = fopen("www.selfas.de/info.txt","r");

Um mit Hilfe von fopen() Dateien zu öffnen, die einen Benutzernamen und ein Passwort voraussetzen, platzieren Sie die Authentifizierungsinformationen wie folgt in die URL:

$datei = fopen("ftp://benutzername:passwort@ftp.selfas.de/pub/info.txt","r");

$datei = fopen("benutzername:passwort@www.selfas.de/info.txt","r");

Die Dateien werden mit Hilfe des URL-fopen-Wrapper übertragen. In der Standardkonfiguration ist dieser freigegeben, lässt sich jedoch durch die Option allow_url_fopen in Ihrer php.ini sperren. Wenn Sie Dateien auf einem entfernten Server nicht mit fopen() öffnen können, sollten Sie Ihre Server-Konfiguration überprüfen.


Einsatz von fgets()

Neben dem bereits vorgestellten fread() steht Ihnen zum Auslesen einer Datei auch noch fgets() zur Verfügung. Sie unterscheiden sich in einem wesentlichen Punkt: fread() liest immer so viele Zeichen, wie im zweiten Argument angegeben werden, fgets() liest nur bis zum nächsten Zeilenumbruch, auch wenn im zweiten Argument ein grösserer Wert angegeben wurde.

Hinweis: fread() ignoriert beim Auslesen einer Datei die enthaltenen Zeilenumbrüche.



Beispiel - Inhalt von info.txt



Matthias
Caroline




Beispiel - auslesen.php mit fread()



<?php

$datei 
fopen("info.txt","r");
echo 
fread($datei,1000);
fclose($datei);

?>




Ausgabe



Matthias
Caroline




Beispiel - auslesen.php mit fgets()



<?php

$datei 
fopen("info.txt","r");
echo 
fgets($datei,1000);
fclose($datei);

?>




Ausgabe



Matthias



Wie wäre es noch mit folgender Variante:


<?php

$datei 
fopen("info.txt","r");
echo 
fread($datei,1000);
echo 
fgets($datei,1000);
fclose($datei);

?>




Ausgabe



Matthias
Caroline



Das vorliegende Beispiel zeigt, wie die Funktionen arbeiten. Bei jedem Aufruf setzen sie den internen Dateizeiger an das Ende des eingelesenen Abschnitts. Bei fgets() ist das in der Regel eine Zeile. Sollte jedoch eine Zeile länger sein als im zweiten Argument angegeben, wird lediglich ein Teil der Zeile eingelesen. Sie sollten die Funktion fgets() in einer Schleife einsetzen, um nacheinander sämtliche Zeilen auszugeben. Wie wäre es die Ausgabe durch HTML-Angaben zu formatieren:


<?php

$datei 
fopen("info.txt","r");
$zeile true;
while (
$zeile) {
    
$zeile fgets($datei100);
    echo 
"<b>$zeile<b><br>";
}
fclose($datei);

?>




Ausgabe



Matthias 
Caroline



Da fgets() ein Leerzeichen zurückgibt und dieses von der while-Schleife als false interpretiert wird, können Sie den Rückgabewert als Abbruchkriterium einsetzen. Die Schleife endet automatisch, wenn in der Datei keine weiteren Zeilen vorkommen.


Zählen von Zeilen und Absätze

Die Funktion fgets() kann Ihnen auch dabei behilflich sein, eine Datei zu analysieren, wie beispielsweise die Anzahl der Zeilen oder Absätze zu ermitteln.


Beispiel - Ermitteln der Anzahl von Zeilen



<?php

$zeilen 
0;

if (
$datei fopen("daten.txt","r")) {
  while (!
feof($datei)) {
    if (
fgets($datei,1048576)) {
      
$zeilen++;
    }
  }
}

echo 
$zeilen;

fclose($datei);

?>




Beispiel - Ermitteln der Anzahl von Absätzen



<?php

$absaetze 
0;

if (
$datei fopen("daten.txt","r")) {
  while (! 
feof($datei)) {
    
$z fgets($datei,1048576);
    if ((
"\n" == $z) || ("\r\n" == $z)) {
      
$absaetze++;
    }
  }
}
echo 
$absaetze;

fclose($datei);

?>



Hinweis: Der Wert für das zweite Argument in fgets() wurde bewusst so hoch gesetzt um möglichst sämtliche Zeichen pro Zeile zu erfassen.



Sonderfall - Datensätze

Eine Datei, welche Datensatz ähnliche Strukturen aufweist, wie Trennzeichen kann ebenfalls auf diese Weise analyisiert werden.


Inhalt der db.txt Datei



Matthias Kannengiesser
-*-
Caroline Kannengiesser
-*-
Gülten Kannengiesser
-*-




Beispiel - Ermitteln der Anzahl von Datensätze



<?php

$dsatz 
0;
$dsatz_trenner '-*-';

if (
$datei fopen('db.txt','r')) {
  while (! 
feof($datei)) {
    
$z rtrim(fgets($datei,1048576));
    if (
$z == $dsatz_trenner) {
      
$dsatz++;
    }
  }
}

echo 
$dsatz;

fclose($datei);

?>




Bearbeiten einzelner Worte einer Datei

Um mit Hilfe der Funktion fgets() einzelne Wörter bearbeiten bzw. erfassen zu können sollten Sie zusätzlich reguläre Ausdrücke mit der Funktion preg_split() verarbeiten.


Inhalt - daten.txt



Matthias ist dort
Caroline ist hier




Beispiel



<?php

$datei 
fopen('daten.txt','r');
while (! 
feof($datei)) {
    if (
$z fgets($datei,1048576)) {
        
// Zeile nach Worte durchsuchen
        
$worte preg_split('/\s+/',$z,-1PREG_SPLIT_NO_EMPTY);
        
// Alle Wörter einer Zeile bearbeiten
        
foreach ($worte as $wort) {
            echo 
"<b>$wort</b><br>";
        }
        
// Nächste Zeile (als Absatz)
        
echo "<p>";
    }
}

fclose($datei);

?>




Ausgabe



Matthias
ist
dort

Caroline
ist
hier




Quelltext Ausgabe



<b>Matthias</b><br><b>ist</b><br><b>dort</b><br><p><b>Caroline</b><br><b>ist</b><br><b>hier</b><br><p>



Der Code verwendet das Metazeichen \s der der Perl-kompatiblen Regular Expression Engine. Hiermit werden Leerzeichen (Whitespace) jeglicher Art verarbeitet, wie Leerzeichen, Tabulatoren, Zeilenvorschübe, Wagenrückläufe und Seitenvorschübe.


 


Dateioperationen und Dateifunktionen
 




 sponsored by

Host Europe


HighText iBusiness


Host Europe




© 2001-2006 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005-2006 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de