Tom: Datei setzt sich von selbst auf 0 Byte

Beitrag lesen

Hello,

<?
$datei = fopen("besucher.txt","r");

$besucher = fgets($datei,255);
fclose($datei);

$besucher++;

$datei = fopen("besucher.txt","w");
fputs($datei,$besucher,255);
fclose($datei);

echo "Du bist der $besucher Besucher.\n";

?>

Das könnte an gleichzeitigen zugriffen liegen. Dann wird die Datei zurückgesetzt.
So funzt es besser:

Das "funzt" aber auch noch richtig, wenn "funzen" == "krachen" ist... ;-))

<?
$datei = fopen("besucher.txt","r");

$besucher = fgets($datei,255);
fclose($datei);

$besucher++;

$datei = fopen("besucher.txt","w");
flock($datei,"2");  // Datei exclusiv öffnen
fputs($datei,$besucher,255);
flock($datei,"3"); // Datei wieder freigeben
fclose($datei);

echo "Du bist der $besucher Besucher.\n";

?>

Wird Zeit. dass mein Artukel zum Locking fertig wird. Es ist nämlich falsch, was Du empfiehlst, obwol die Richtung schon passt.

<?php  ### counter.php ###

$dateihandle = fopen("besucher.txt","a+");    ## Datei zerstörungsfrei öffnen  oder anlegen

if($dateihandle and flock($dateihandle))      ## wenn ein Handle erteilt wurde, wird solange
  {                                             ## gewartet, bis locked werden konnte
    $fseek($dateihandle,0,SEEK_SET);            ## Dateizeiger auf Anfang
    $besucher = intval(fgets($datei,255));      ## Typconvertierung in Ineteger des gelesenen Wertes
    $besucher++;                                ## incrementieren
    $fseek($dateihandle,0,SEEK_SET);            ## Dateizeiger auf Anfang
    fputs($dateihandle,$besucher);              ## zurückschreiben
    $ftruncate($dateihandle,strlen($besucher)); ## Dateilänge anpassen
    fclose($dateihandle);                       ## beim Close wird automatisch unlocked
  }
  else
  {
    mail("webnmaster@domain.tld","Fehler beim Counter","Der Coeunter konnt nicht zaehlen");
  }

?>

Für eine Datenveränderung muss die Datei vor dem Leseprozess gesperrt werden und erst nach dem Schreibprozess wieder freigegeben werden.

Das Truncate nach dem Schreiben ist wichtig, dass ggf. ünerhängende alte Inhalte gekürst werden.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau