Datei lesen
Wie kann ich eine Datei öffnen, in einer Datei lesen und aus einer datei einzelne Zeilen ausgeben? Diverse Möglichkeiten sind durch PHP Funktionen gegeben.
Einzelne Zeilen lesen
fopen(), fgets(), fclose()
Eine Datei muss zuerst geöffnet werden, um darin zu lesen oder um daraus etwas auszuwählen. Der Funktion fopen($datei, 'modus') wird als zweiter Parameter der Modus übergeben, der bestimmt, wie/wofür eine Datei geöffnet wird (weitere Infos in syntax.php):
modus Funktion Cursor am Datei ... Neue Datei anlegen? Datei überschreiben? ---------------------------------------------------------------------------------------------------- r Lesen Anfang Nein Nein r+ Lesen und Schreiben Anfang Nein Ersetzt Anzahl Anschläge w Schreiben Anfang Ja Ja w+ Lesen und Schreiben Anfang Ja Ja a Schreiben Ende Ja Nein a+ Lesen und Schreiben Ende Ja Nein
<?php
// Eine Datei im Modus r zum lesen öffnen
$file="datei_content_raw2.txt";
$fp=fopen($file, "r") // noch kein Semikolon
or die("Konnte $file nicht öffnen"); // Fehlermeldung ausgeben
// lese 1024 Zeichen oder falls vorher fertig bis zum Ende der Zeile
$firstline=fgets($fp, 1024);
$first6=fgets($fp, 6); // lese nur 6 Zeichen
$next=fgets($fp, 10); // lese die nächsten 10 Zeichen
echo "$firstline<br />";
echo "$first6<br />";
// Nur wenn der FilePointer das Ende der Zeile erreicht, wartet er am Anfang der nächsten Zeile!!!<br />
echo "$next<br />";
fclose($fp); // Datei sollte immer geschlossen werden
?>
|Diese Site ist super|http://www.biefer.com
|Das
ist nicht
|Das
ist nicht
Alles Zeilenweise einlesen
<?php
$file="datei_content_raw2.txt";
$fp=fopen($file, "r")
or die("Konnte $file nicht öffnen");
while(! feof($fp)) { // Schleife solange nicht das Ende des Files erreicht wurde
$line=fgets($fp, 1024); // lese Zeile für Zeile
echo "$line<br />"; // und gebe diese aus
}
if ($fp) fclose($fp); // Datei sollte immer geschlossen werden falls sie überhaupt geöffnet wurde
?>
|Diese Site ist super|http://www.biefer.com
|Das ist nicht meine Site|http://www.biefer.ch
|Das ist nicht meine Site|http://www.biefer.ch
Zeichen für Zeichen lesen
fgetc()
Genau so wie oben, aber mit fgetc($fp); // FilePointer geht zum nächsten Zeichen nicht zur nächsten Zeile. (Ich habe einen counter für 10 Linien eingebaut.)
|
D
i
e
s
e
S
i
t
D
i
e
s
e
S
i
t
Ab einer bestimmten Position eine angegebene Menge lesen
fseek(), fread()
<?php
$file="datei_content_raw2.txt";
$fp=fopen($file, "r")
or die("Konnte $file nicht öffnen");
fseek($fp,10); // gehe 10 Zeichen vor
$sweet16=fread($fp, 16); // lese 16 Zeichen und bleibe stehen
echo "$sweet16<p/>"; // und gebe diese aus
fclose($fp); // Datei sollte immer geschlossen werden
?>
e ist super|http
Ab der 2. Hälfte die 2. Hälfte
<?php
$file="datei_content_raw2.txt";
$fp=fopen($file, "r")
or die("Konnte $file nicht öffnen");
// Zum Beispiel ab der 2. Hälfte die 2. Hälfte:
$fsize=filesize($file); // hole Grösse des Files in Bites (=Anschläge)
$fhalf=(int)($fsize/2); // berechne die Hälfte des Files in Bites
echo "Die Dateimitte ist bei: $fhalf Zeichen<br />\n"; // gib Anzahl Zeichen bis zur Filemitte aus
fseek($fp, $fhalf); // gehe zur Filemitte
$teil2=fread($fp,($fsize - $fhalf)); // lese die zweite Filehälfte
echo "<pre>$teil2</pre>"; // gebe die zweite Filehälfte aus
fclose($fp); // Datei sollte immer geschlossen werden
?>
Die Dateimitte ist bei: 45 Zeichen
Das ist nicht meine Site|http://www.biefer.ch
Passt!