Datei auslesen nicht

Tucker

Erfahrenes Mitglied
Hi,

ich schreibe gerade an einem Textbasiertem Gästebuch. Allerdings scheitert es schon am auslesen der Textdatei.
Hier das Script dazu:
PHP:
<?$modus="a";
$datei="gb.txt";

$fp= fopen($datei, $modus);

$string=file($fp); 
$anzahl=count($string);
?>
<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../../style/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="80%">
	<tr>
		<td colspan="3">
			<h1>Mein Gästebuch</h1>
		</td>
	</tr>
	<tr>
		<td colspan="3">Anzahl der Einträge: <?php  echo $anzahl;?></td>
	</tr>
	<tr>
		<td bgcolor="#999999"><b>Datum</b></td>
		<td bgcolor="#999999"><b>Name</b></td>
		<td bgcolor="#999999"><b>Nachricht</b></td>
	</tr>
	<?php 
	while ($string=fgets($fp))
	{
	for ($i=0; $i<count($string); $i++){
	
	$daten=explode("|*|", $string[$i]);
	?>
	<tr valign="top">
		<td bgcolor="#cccccc"><?php 
								echo $daten[1];?></td>
		<td bgcolor="#cccccc"><?php echo $daten[0]."\n"; echo "<a href=\"mailto:".$daten[2]."\">".$daten[2]."</a>";?></td>
		
    <td bgcolor="#cccccc" class="boxcontent">
      <?php
							   $text=nl2br(strip_tags(stripslashes($daten[3])));
							  echo $text;
							  ?>
    </td>
	</tr>
	<?php }}?>
...

Ich weiß mir keinen Rat mehr, warum das mit dem auslesen nicht funktioniert. Ich habe in eine Datei "gb.txt" eine Testzeile rein geschrieben und chmod auch auf 777. Also muss es am Script liegen. Allerdings wurde ich aus bisherigen Beiträgen hier im Forum auch nicht schlau und bitte deshalbum Hilfe.
 
hmm einfach wäre hier in der Befehlreferenz von PHP nachzulesen.
Dann würdest du lesen, das file() also Parameter den Dateinamen und keine Ressource einer z.B. mit fopen() geöffneter Datei (was hier $fp ist) haben will.

DAher folgende möglichkeiten zum einlesen:

a) Zeilenweise mit fopen()
PHP:
if( ($fh = @fopen("datename", "r")) === FALSE )
     die("Fehler beim öffnen");

while( !feof($fh) )
{
 $zeile = trim(fread($fh));
  //und was du nun auch immer mit der Datenzeile machen willst
}

oder eben ganz einfach nur mit file den ganzen Inhalt, der dann in einem Array steht mit file()

PHP:
$inhalt_array = file("dateiname");
//evtl. elemente mit Implode zu einem String zusammenführen
 
1.) Warum öffnest Du die Datei einmal mit [phpf]fopen[/phpf] und holst Dir dann den Dateiinhalt nochmal mit [phpf]file[/phpf]?
Edit: Die Verwendung des Filepointers ist mit gar nicht aufgefallen :)

2.)
PHP:
while ($string=fgets($fp)) 
    { 
    for ($i=0; $i<count($string); $i++){ 
     
    $daten=explode("|*|", $string[$i]);
Hier holst Du Dir eine Zeile in die Variable $string und versuchst gleich darauf diesen als Array anzusprechen, indem Du versuchst die Arraypositionen zu zählen und diese zu durchlaufen. Das kann doch nicht funktionieren, weil es kein Array ist und Du es zuvor überschrieben hast!

3.) Gehe Deinen Code nochmal durch und sprich Dir einmal selbst vor, was er eigentlich macht. Dann kommst Du auch selbst auf die Fehler.

4.) Teste öfter! Es bringt keine Punkte, riesige Codeabschnitte zu erstellen und dann alles auf einmal zu testen. Das ist besonders bei Programmieranfängen falsch. Probiere also in Zukunft in kleineren Schritten zu testen, dann kommt auch nicht so viel Murks in den Code.

snuu
 
Also es liest mir jetzt schon mal was aus der Datei. Allerdings wenn ich nach deiner Methode gehe, erzeuge ich damit eine Endlosschleife.

PHP:
while ( !feof("gb.txt"))
	{
	$zeile = trim(fread($fh));
	$daten=explode("|*|", $zeile);
...

Warum erzeigt es mir hier bei einer Zeile in der gb.txt eine Endlosschleife? Die Seite läd ewig und wenn ich mir den Quellcode anschaue, dann kommt der Teil nach daten zich mal vor.
 
immer noch die Endlosschleife. Mir vergeht langsam die Lust. Sitze seit Gestern nur am auslsen der Datei.

PHP:
	if (($fh=@fopen("gb.txt", "r")) === FALSE)
	{
	die ("Fehler beim Öffnen");
	}
	
	while ( !feof($fh))
	{
	
	$zeile = trim(fread($fh));
	$daten=explode("|*|", $zeile);
	
			
	echo "<tr valign=\"top\">
		  <td bgcolor=\"#cccccc\">"; 
	echo $daten[1]."</td>
		  <td bgcolor=\"#cccccc\">";
	echo $daten[0]."\n"; 
	echo "<a href=\"mailto:".$daten[2]."\">".$daten[2]."</a>";
	echo "</td>";
	echo "<td bgcolor=\"#cccccc\" class=\"boxcontent\">";
	
	$text=nl2br(strip_tags(stripslashes($daten[3])));
	echo $text;
	echo "</td>";
	echo "</tr>";
	}
	
	?>

Bitte um Hilfe. Ich habe nun die gb.txt gelöscht. Es kommt keine Ausgabe, von wegen "Fehler beim Öffnen" und es wird trotz dem Nichtvorhandensein der Datei eine Endlosschleife. :(
 
Zuletzt bearbeitet:
Folgendes funktioniert bei mir (getestet):
PHP:
<?php
  $zeilen = @file('gb.txt');
  if ($zeilen) {
    for ($x = 0; $x < count($zeilen); $x++) {
      $daten = explode('|*|', $zeilen[$x]);
      echo '<br>'.$daten[0].' - '.$daten[1];
    }
  }
?>
In der Datei gb.txt steht:
Code:
1|*|A
2|*|B
3|*|C

Mach was draus!

snuu
 
Funktioniert wunderbar. Ich dank dir für deine Hilfe.

Aber ich steh schon vor dem nächsten Problem. Bin grad dabei, eine Adminseite ein zu richten und Smiles zu integrieren. Wenn ich es nicht packe, melde ich mich bei dir. ;)
 
Trauch die Suchfunktion ni. Hab das mit den Smiles auch ohne Hilfe hin bekommen. ;) ABer trotzdem Danke
 
Zurück