Hi!
Hier die fertige Lösung:
die aber fehlerhaft ist.
[code lang=php]<?php
$counterFileName = "counter.txt";$counterstand = (int) file\_get\_contents($counterFileName);
Wenn counter.txt nicht vorhanden ist, müsste dieser Zugriffsversuch eine Warnung erzeugen.
if ($_SESSION['count'] != 'count') {
$counterstand++;session_start();
Eine Session muss geöffnet werden, bevor sinnvollerweise Werte in $_SESSION gelesen und geschrieben werden. Außerdem ist nach einer neu erstellten Session $_SESSION leer, ein Leseversuch eines in dem Fall nicht vorhandenen Wertes ist im Prinzip ein Fehler, der auch eine E_NOTICE-Meldung ergibt, die PHP jedoch üblicherweise nicht anzeigt. (error_reporting zum Entwickeln auf E_ALL stellen!)
$\_SESSION['count']='count';
} else {
fclose ($counterstand);
$counterstand ist der Zählerwert und kein File-Handle, kann also nicht geschlossen werden. Und was ist nun mit dem inkrementierten Zählerwert? Er wird nicht weggeschrieben. Die Anzeige wird deswegen nicht über 1 hinauskommen. Und selbst wenn du das fclose() durch einen richtig notierten file_put_contents()-Aufruf ersetzt, kann es Situationen geben, in denen der Zähler nicht hochzählt - nämlich dann, wenn zwei Anwender nahezu gleichzeitig zugreifen und die eine Scriptinstanz ihren inkrementierten Wert wegschreibt, nachdem die andere Instanz den immer noch gleichen Wert aus der Datei gelesen hat. Solche Fehler lassen sich sehr schwer finden, weil sich solche Situationen üblicherweise im Laborbetrieb nicht auftreten und sich auch nicht besonders einfach nachstellen lassen. Vermutlich kommt es bei diesem Zähler auf diese Ungereimtheit nicht an, wenn du es aber ordentlich lösen willst, wäre eine exklusive Sperre von vor dem Lesen bis zum Datei-Schließen angebracht.
Lo!