Ich zeige Highcharts auf meiner Website, die die Daten einer externen API visualisiert. Anstatt diese API mit jedem Seitenaufruf aufzurufen, möchte ich die abgerufenen Daten lokal in einer Cachedatei speichern. Der nächste Benutzer, der die Seite besucht, sollte die Highcharts-Daten von dieser lokalen Cachedatei abrufen, anstatt von der API-URL (um API-Aufrufe und Highcharts Ladezeit zu reduzieren). Die Cachedatei sollte 60 Minuten lang aktuell sein.PHP Cache externe JSON API in lokaler Datei - funktioniert nicht
Ich habe hier eine Antwort gefunden 5-minute file cache in PHP, aber es funktioniert nicht für mich.
ich kopiert grundsätzlich den Code in meine eigene PHP-Datei:
....
//to be sure about the correct file path,
//I used here the absolute URL of my site: "https://www.example.com/path/to/my/cache.json"
$cache_file = "path/to/my/cache.json";
$api_url = "http://www.someapi.com/api";
if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 60 * 60))) {
// Cache file is less than 60 minutes old.
//Don't bother refreshing, just use the file as-is.
$json = file_get_contents($cache_file);
} else {
//Our cache is out-of-date, so load the data from our remote server,
//and also save it over our cache for next time.
$json = file_get_contents($api_url);
file_put_contents($cache_file, $json);
}
//decode JSON to array
$data = json_decode($json,true);
....
wheni meine Seite laden, werden die die Highcharts die Ergebnisse anzeigt, aber anscheinend nur durch die API-URL. Meine cache.json Datei bleibt leer. Ich gab es chmod 777 und so tat ich für das übergeordnete Verzeichnis Daten und dataCache.
Um den Code zu testen, habe ich versucht, zu debuggen out-Kommentierung die Linie
//$json = file_get_contents($api_url);
Was dann passiert, ist, dass die Highcharts gar nicht alle Daten angezeigt werden soll. Also habe ich gelernt, dass die IF-Schleife etwas funktioniert - aber nicht so, wie es sollte.
Ich kopierte dann die JSON-Daten aus der API-Antwort und speicherte sie in meiner cache.json Datei. Now-Kommentar gesetzt ich die Linie
//$json = file_get_contents($api_url);
Ich habe gehofft, dass ich da eine frisch erstellten cache.json Datei, die ersten IF-Bedingung erfüllt sein würde und damit die Highchart würden die Daten aus meiner Cache-Datei abrufen . Das ist jedoch nicht geschehen. Die Highcharts zeigen keine Daten mehr an.
Können Sie mir bitte helfen zu verstehen, warum der Code nicht funktioniert (obwohl ich es grundsätzlich von hier kopiert 5-minute file cache in PHP)?
P.S .: Ich bin mir nicht sicher, ob dies vielleicht nur eine "doppelte" Frage ist. Aber da die Antwort in der ursprünglichen Frage für mich nicht funktioniert, war ich mir nicht sicher, wie/wo ich fragen sollte.
Diese 'https: // www.example.com/data/dataCache/cache.json' sieht nicht wie eine lokale Datei aus. – RiggsFolly