• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

php fwrite problem

templer7

New member
hallo leute,

aus irgendeinem grund erhalte ich in meiner .txt nach dem mehrfachen ausführen dieses scriptes leerzeilen und nullen und ich weiß nicht warum. könntent ihr das mal bitte prüfen.

Code:
<?php
      	$filename = "txt/zeit.txt"; 
      	if(!file_exists($filename)) { 
      		$handle = fopen($filename, "w+"); 
      		fwrite($handle, time());  
      		fclose($handle); 
      	} else { 
      		$handle = fopen($filename, "r"); 
      		$date = fread($handle, filesize($filename)); 
      		fclose($handle); 
      		$date = time() - $date; 
      		$handle = fopen($filename, "w"); 
      	fwrite($handle, time()); 
      	fclose($handle); 
      	} 
      	$filename = "txt/werte.txt"; 
      	$handle = fopen($filename, "r"); 
      	while(!feof($handle)) { 
      		$buffer[] = fgets ($handle);		 
      	} 	 
      	$buffer[0] += ($date * round($buffer[1] / 3600)); 
      	$buffer[2] += ($date * round($buffer[3] / 3600)); 
      	$text =  implode("\r\n", $buffer); 
      	fclose($handle);
      	$handle = fopen($filename, "w+"); 
      	fwrite($handle, $text); 
      	echo "<pre>";
      	print_r ($buffer);
      	fclose($handle); 	 
?>

in der werte .txt stehen 4 zeilen
z1 = wert1
z2 = faktor1 zu wert1
z3 = wert2
und z4 = faktor2 zu wert2

Code:
100
2500
150
5000

nach dem 2 ausführen sieht das aber so aus:
Code:
458
2500
                    <<-- schon die erste leerzeile
508
5000

nach merhmaligen ausführen sind mehr leerzeilen und zusätzliche nullen enthalten. wo liegt mein fehler.

dannke
mfg
sven
 
Was willst du hier erreichen?
PHP:
$buffer[0] += ($date * round($buffer[1] / 3600));
 
Zuletzt bearbeitet von einem Moderator:
fgets liefert die gesamte Zeile - inklusive des Zeilenumbruchs - mit dem implode machst du dann noch einen.
 
danke erstmal,
aber anfangs habe ich es auch ohne /n gemacht, dabei funktioniert aber nur der erste durchgang. danach habe ich nur noch 2 zeilen, weil er ( buffer[0] und buffer[1] ) und ( buffer[2] und buffer[4] ) hinterinenander schreibt.

mfg
sven
 
Du solltest dir wirklich mal überlegen, wo du welche Information in welcher Variablen hast (var_dump hilft) du machst ein paar Casts, die du anscheinend nicht wahrnimmst.Z.B. hier:
Code:
      	$buffer[0] += ($date * round($buffer[1] / 3600));
machst du aus einem String eine Zahl -> das "\n" am Ende ist natürlich weg wenn du in implode zurückcastest.
Lösungsmöglichkeit:
Code:
$buffer[0] .= "\r\n";
und das implode ohne.
 
Zurück
Oben