Dateiende abfragen und feof

Hallo zusammen,

ich habe eine Textdatei mit zwei Zeilen. Beide Zeilen wurden in die Datei mit einem \n am Ende geschrieben: fwrite($datei_zeiger,$text.„\n“);

Sieht dann also z.B. so aus:

abc
xyz

Weiterer Text würde nun in die nächste Zeile nach „xyz“ geschrieben usw. Wenn ich aber die Textdatei öffne, in die Zeile nach „xyz“ gehe und per „Backspace-Taste“ den Cursor eine Zeile höher hinter „z“ platziere, sieht die Sache anders aus.
Dann wird neuer Text direkt hinter „xyz“ geschrieben:

abc
xyzneu

Wie kann ich überprüfen, ob hinter „xyz“ ein /n existiert oder ob der Cursor am Anfang einer leeren Zeile steht?

Noch eine andere Frage:
feof soll ja eigentlich TRUE zurückgeben, wenn der Dateizeiger am Ende der Datei steht.
Wenn ich eine Datei mit der Methode a+ öffne, wodurch der Dateizeiger auf das Ende gesetzt wird, scheint das nicht zu klappen, oder verstehe ich das falsch?

$datei_zeiger = fopen(„test.txt“,„a+“);
echo feof($datei_zeiger);
fclose ($datei_zeiger);

zeigt weder TRUE noch FALS an.

Besten Dank für eure Hilfe

BG
elchivato {°.°}

\n ist ja nur ein UNIX-Zeilenumbruch. Somit kannst Du die Datei auch zeilenweise einlesen:

$datei = file("file.txt"); echo $datei[1];

Wenn Du die Datei selbst auf einem Windows-System öffnest könnte es passieren, dass dein Editor dort den UNIX-Zeilenumbruch nicht erkennt. Windows erwartet \r\n statt nur \n.

So ist es. Kommt Unix mit \r\n zurecht? Aus Gründen der Performance, wollte ich die Datei nicht - vor jedem Schreiben neuer Daten - zeilenweise einlesen. Einfach hinten dran in eine neue Zeile schreiben, nur eben mit Überprüfung, ob es auch die neue Zeile ist.

Wenn es nicht anders geht, werde ich deinen Vorschlag mal umsetzen.

Besten Dank

BG
elchivato

Imho nein, nur wenn man den Code entsprechend umwandelt was einige Editoren beherrschen.

feof()

Danke für deine Antwort.

Kannst du mir evtl. noch sagen ob ich hiermit

$datei_zeiger = fopen(„test.txt“,„a+“);
echo feof($datei_zeiger);
fclose ($datei_zeiger);

eine Ausgabe (TRUE oder FALSE) erhalten sollte?
Oder wie kann ich den Rückgabewert von feof() sehen/auswerten?

Im Moment ist nix zu sehen im Browser.

Besten Dank

BG
elchivato {o.o}

Schau dir mal die Ausgabe von

vardump(feof($datei_zeiger));

an.

was macht feof()

Danke für den Tipp. Hat mit var_dump() geklappt.

Im Beispiel:
[php]
$datei_zeiger = fopen(„test.txt“,„a+“);
var_dump(feof($datei_zeiger));
[/php]erhalte ich bool(false) als Ausgabe. mode „a+“ sollte doch den Dateizeiger auf das Ende der zu öffnenden Datei positionieren. Dann müsste doch feof() eigentlich TRUE sein, oder?

Eine Ausgabe von:
[php]
$buffer = fgets($datei_zeiger);
echo $buffer;
[/php]gibt mir die erste und nicht die letzte Zeile aus. Wie kann ich denn den Dateizeiger noch an das Ende setzen und überprüfen? Oder gehe ich mit feof() falsch an die Sache ran?

Danke für deine Hilfe.

BG
elchivato {o.o}

machs doch einfach so

[php]$f = ‚datei.txt‘;
$h = file_get_contents($f);
$h = str_replace(„\r“, null, $h);
$h = explode(„\n“, $h);

echo ‚

‘;
var_dump($h);[/php]