Hilfe bei einem PHP-Skript -> JSON-Datei erstellen

Begonnen von TomLee, 15 Februar 2022, 12:50:27

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

kann mir hier ein Spezi ggfs. weiterhelfen ?

Beschäftige mich derzeit mit diesem Beispiel-Skript.

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;                         
}

?>

TomLee

Upps,

sry, ich war bis tief in den Morgen an dem letzten gezeigten Code dran, ich hab zwei Verzeichnisse die ich zum testen nutze und hatte den Code im falschen Ordner abgelegt.  ::)

Es klappt alles wie es soll, nur bleibt die Frage ob das nicht einfacher, kürzer geht ?