Hallo,
kann mir hier ein Spezi ggfs. weiterhelfen ?
Beschäftige mich derzeit mit diesem Beispiel-Skript (https://www.php-einfach.de/experte/php-codebeispiele/besucherzaehler-mit-reload-sperre/).
Das hab ich leicht angepasst, das der Wert des Counter zusätzlich zu der Text-Datei auch in eine JSON-Datei geschrieben wird, was mir dann das zyklische einlesen mit HttpUtils_NonblockingGet iVm. json2reading ermöglicht:
<?php
$csar = array();
$counterstand = intval(file_get_contents("counter.txt"));
if(!isset($_SESSION['counter_ip']))
{
$counterstand++;
file_put_contents("counter.txt", $counterstand);
$_SESSION['counter_ip'] = true;
}
$csar["counter"] = "$counterstand";
// encode array to json
$json = json_encode($csar);
file_put_contents("counter.json", $json);
echo $counterstand;
?>
Jetzt wär ich ja nicht ich, wenn ich es nicht versuchen würde nur mit der JSON-Datei umzusetzen.
Das mit intval ist schon genial, das die Funktion 0 zurückgeben kann, kann man mit der JSON-Datei aber nicht verwenden.
Hab mich mit PHP noch nie beschäftigt, mit dem bisher eingelesenen komm ich bisher nur auf eine längere Variante es anzugehen und die klappt auch noch nicht wirklich.
Es geht darum beim ersten Aufruf die JSON-Datei anzulegen wenn sie noch nicht existiert, das Key/Value.Paar (counter=>0) in die Datei reinzuschreiben und den Wert 0 daraus zurückzugeben, das klappt auch, ich mein aber es ist umständlich umgesetzt, es gibt bestimmt (wie mit intval) eine ganz einfache Lösung dafür.
Hochgezählt wird jetzt auch schonmal wenn ich händisch das Skript aufrufe, bei einem Aufruf über den Browser aber noch nicht:
<?php
$csar = array();
$fex = file_exists("counter.json");
if (!$fex) {
$csar["counter"] = 0;
$json = json_encode($csar);
file_put_contents("counter.json", $json);
$counterstand= $csar["counter"];
}
elseif ($fex) {
$json = file_get_contents("counter.json");
$decoded_json = json_decode($json);
$counterstand=($decoded_json->counter);
if(!isset($_SESSION['counter_ip']))
{
$counterstand++;
$csar["counter"] = $counterstand;
$json = json_encode($csar);
file_put_contents("counter.json", $json);
$_SESSION['counter_ip'] = true;
}
}
echo $counterstand;
?>
Hier im Forum gibts doch sicherlich jemanden der mir dazu ein paar Tipps geben kann das vernünftig umzusetzen ?
Gruß
Thomas
edit:
- man braucht keine leere Array-Variable definieren, gibts das Array nicht wird es einfach erstellt (->$csar["counter"] = 0;)
- Denkfehler bereinigt, die JSON-Datei wurde zuvor einfach überschrieben, jetzt wird das Key/Value-Paar dem Json hinzugefügt
- Code bereinigt
<?php
if (!file_exists('counter.json')) {
$csar["counter"] = 0;
file_put_contents('counter.json',json_encode($csar));
$counterstand = $csar['counter'];
}
else {
$decoded_json = json_decode(file_get_contents('counter.json'), true);
$counterstand=$decoded_json['counter'];
//if (!isset($_SESSION['counter_ip'])) {
$counterstand++;
$decoded_json['counter'] = $counterstand;
file_put_contents('counter.json', json_encode($decoded_json));
// $_SESSION['counter_ip'] = true;
// }
echo $counterstand;
}
?>