Problem beim einlesen einer Datei

micha72

Grünschnabel
Hallo zusammen, leider hab ich es nicht alleine geschafft und somit bitte ich euch mir zu helfen.

Mit einem Script werden Informationen in die userdaten.dat geschrieben, die dann von diesem Script ausgelesen werden.

Beim schreiben der userdaten.dat wird bei der letzten Zeile ein Umbruch gemacht, wie kann ich dem Script sagen das der Umbruch der letzten Zeile beim einlesen wieder weg gemacht wird? weil wenn der Zeilenumbruch vorhanden ist, wird auch eine Tabelle generiert wo dann nichts drin steht.


PHP:
<?php
$fp = fopen("../cgi-bin/statistik/userdaten.dat","r");
if ($fp) 
{ 
while(!feof($fp))
{ 
$zeile = fgets($fp,100);
$array = explode("|", $zeile);
echo"
<table width=400 border=0 align=center cellpadding=3 cellspacing=0>
 <tr>
	<td width=25% align=left bgcolor=#90A15B>userdaten</td>
  <td width=25% align=right bgcolor=#90A15B></td>
 </tr>
 <tr>
  <td width=25% align=right bgcolor=#E6EBC2>ip:</td>
  <td width=25% align=left bgcolor=#E6EBC2>".$array[0]."</td>
 </tr>
 <tr>
  <td width=25% align=right bgcolor=#F8F9EC>browser:</td>
  <td width=25% align=left bgcolor=#F8F9EC>".$array[1]."</td>
 </tr>
 <tr>
  <td width=25% align=right bgcolor=#E6EBC2>betriebssystem:</td>
  <td width=25% align=left bgcolor=#E6EBC2>".$array[2]."</td>
 </tr>
</table>
<p></p>
";
} 
fclose($fp);
} 
else 
{ 
echo "datei wurde nicht gefunden";
}
?>
 
Zuletzt bearbeitet:
Wenn es nicht das <br> Element ist, dann schau mal uner selfphp.info nach, da gibts ne Liste von Befehlen, wo uner Garantie auch einer dabei ist, der Zeilenumbrüche entfernt. Ich habe ihn leider gerade nicht zur Hand.
 
Hi,
wenn ich Dich richtig verstehe, steht in Deiner Datei sowas:

Code:
63.66.123.55|Mozilla Firefox|Linux<nl>
88.222.55.123|Internet Explorer|Windows<nl>
<nl>

das einfachste wäre doch, wenn man über strlen() die Länge des Strings ermittelt. Selbst wenn du eine leere Zeile hättest, würdest Du 3 Trennzeichen für das Explode benötigen. Hast Du also weniger als 3 Zeichen, wird die Tabelle einfach nicht mehr ausgegeben :)

Gruss TB
 
Wenn er eine Datei einliest, sind doch die /n und /l umbrüche unsichtbar. Er müsste sie also mit nl2br in <br> umwandeln und dann den letzten entfernen.

Frage: würde mit trim() oder chop() ein Zeilenumbruch am Ende entfernt werden?
 
Mit diesem Schnipsel wird in die userdaten.dat geschrieben:
PHP:
$time = time();
$daten = "{$ip}|{$browser}|{$betriebssystem}|{$time}\n"; 
$datenbank = "$DOCUMENT_ROOT/cgi-bin/statistik/userdaten.dat";
$datei = @fopen($datenbank,"a");
@fwrite($datei, $daten); 
@fclose($datei);

mir geht es nur um die letzte Zeile, wo das unsichtbare \n wieder entfernt wird.
 
Erst mal vielen Dank für die Hilfe, aber weiter bin ich immer noch nicht gekommen.
Frage an TakaBo, wie genau sieht der code Schnipsel aus?
Habe bis jetzt alle tipps versucht, aber geholfen hat es leider nicht, oder einfach keine anung hat.

Das mit fputs geht leider auch nicht, der Zeilenumbruch ist immer noch da.
 
Hi,

also zum Daten schreiben hab ich das exemplarisch so gemacht:
Code:
<?php
    $dat=fopen("./test.dat","a");
    fputs($dat,"111.111.111.111|Mozilla|Winos|".time()."\r\n" );
    fclose($dat);
?>
Nach jedem Aufruf wird ne neue Zeile in die Datei "test.dat" geschrieben.

Gelesen wird dann über:
Code:
<?php
    $dat=fopen("./test.dat","r");
    while(!feof($dat)){
        $zeil=fgets($dat,100);
        if (strlen($zeil)>0){  #Wichtig, wenns darum geht das letzte <nl> zu überspringen
            $teil=explode("|",$zeil);

            echo "
               <table width=400 border=0 align=center cellpadding=3 cellspacing=0>
               <tr>
                <td width=25% align=left bgcolor=#90A15B>userdaten</td>
                <td width=25% align=right bgcolor=#90A15B></td>
               </tr>
               <tr>
                <td width=25% align=right bgcolor=#E6EBC2>ip:</td>
                <td width=25% align=left bgcolor=#E6EBC2>".$teil[0]."</td>
               </tr>
               <tr>
                <td width=25% align=right bgcolor=#F8F9EC>browser:</td>
                <td width=25% align=left bgcolor=#F8F9EC>".$teil[1]."</td>
               </tr>
               <tr>
                <td width=25% align=right bgcolor=#E6EBC2>betriebssystem:</td>
                <td width=25% align=left bgcolor=#E6EBC2>".$teil[2]."</td>
               </tr>
              </table>
              ";
       }
    }
    fclose($dat);
?>

Das feof kommt eigentlich an der falschen Stelle. Deshalb muss nochmal getestet werden, ob der string leer ist.

Hoffe soweit geholfen zu haben.

Gruss TB
 
Zurück