# Zeilenweise aus Textdatei lesen



## DanielBodensee (1. Juni 2004)

Hallo,

ich versuche gerade meine ersten Schritte mit PHP und habe gleich mal ein Problem.

In meiner Benutzerverwaltung prüfe ich auf Vorhandensein der Benutzer-Datei, existiert diese nicht, lege ich die Datei an und schreibe den Kopfsatz in die Datei (Felderbezeichnung).

Anhand dieses Kopfsatzes möchte ich prüfen, ob die Datei korrekt ist bevor ich darauf zugreiffe.

Schreibe ich nun den ersten Kopfsatz in die Datei und prüfe ich dies beim nächsten Durchlauf, erscheint die Meldung "Datei vorhanden". Füge ich eine zweite Zeile hinzu (dies wäre der erste Benutzer), wird der Kopfsatz als nicht korrekt erkannt.

fgets liest doch eigentlich die Datei je Zeile ein, der Fehler kann aber nur darann liegen, dass fgets das Zeilenende nicht erkennt.

Liege ich da falsch?

Anbei mal meine ersten stümperhafte Zeilen ;-)

Gruss,
Daniel


```
<?php
	session_start();
	
	// Kopfsatz definieren (Dateistruktur) welcher in Datei vorhanden sein muss
	$kopfsatz = array ("benutzer","name","vorname","strasse","lkz","plz","ort","telefon","telefax","email");
	$trenner = "|-|";

	// Referenzkopfsatz für Überprüfung/Kopfsatz erstellen
	$kopfsatzrev = "";
	for ($a=0; $a<=sizeof($kopfsatz)-1; $a++)
	   {
	      $kopfsatzrev = $kopfsatzrev.strtoupper($kopfsatz[$a]).$trenner;
	   }
	
	// Benutzerdatei prüfen
	if (file_exists("benutzer.dat"))
	{  // Kopfsatz prüfen ob in Ordnung sonst falsche Datei
	   $datei = fopen("benutzer.dat","r");
	   $buffer = fgets ($datei);
	   if ($buffer == $kopfsatzrev)
	      {
	         echo "Datei ist gleich";
	      }
	   fclose ($datei);
	}
	else
	{  // Benutzerdatei anlegen und Kopfsatz schreiben
	   $datei = fopen("benutzer.dat","w");
	   $kopfsatzrev = $kopfsatzrev ."\n";
	   fputs ($datei, $kopfsatzrev);
	   fclose ($datei);
	}
?>
```


----------



## Tim C. (1. Juni 2004)

Ich konnte mich mit [phpf]fgets[/phpf] und Co nie besonders gut anfreunden. Deshalb habe ich zum Auslesen aus einer Datei immer [phpf]file[/phpf] genutzt. Die Funktion liest den gesamten Inhalt einer Datei in ein Array. Dabei entpricht jede Zeile einem neuen Element. Das fand ich immer bedeutend bequemer zu handhaben, als die Geschichte mit fgets.
Vielleicht hilfts dir.


----------



## Tucker (17. Juni 2004)

Ja, so ein ähnliches Problem habe ich auch. Allerdings bastle ich gerade an einem Gästebuch ohne Datenbank, auf einer Textdatei beruhend. 

Ich habe Versucht, jeden Eintrag in ein Zeile zu schreiben, bzw so weit bin ich noch gar nicht. Ich habe in eine Textdatei "gb.txt" zwei Zeilen geschrieben. Diese wollte ich mit folgendem Code auslesen. 


```
$string=fgets("gb.txt") ;
```

Da je jede Zeile in ein Array eingelesen wird, wollte ich nun weiter aus dem/der entsprechenden string/Zeile die Einträge wieder in ein array anhand eines Trennzeichens schreiben. 


```
for ($i=0; $i<count($string); $i**) //Wiederholen der Schleife so oft, wie es Zeilen gibt
//hier das erste Problem - es zählt null

{
$daten=explode("|*|", $string[$i]);
//hier folgt dann der HTML- Code zu schreiben in die Tabelle
}
```

Jedenfalls liest es mir gar nichts aus dem STring, da das Array String anscheinend nicht existiert. Es scheitert als am auslesen der Datei, was ich durch folgenden Code festgestellt habe:


```
echo count($string);
```


Also es scheitert zur Zeit am auslesen der Datei. Allerdings wüsste ich nicht, wie ich das nun mit dem Befehl file() realisieren sollte. Bitte helft mir!


----------

