我在我的網站上顯示Highcharts,它可視化外部API的數據。我不希望每個網頁瀏覽都調用這個API,而是希望將檢索到的數據本地存儲在緩存文件中。下一個訪問該頁面的用戶應該從該本地緩存文件中獲取Highcharts數據,而不是從API URL中獲取(爲了減少API調用和Highcharts加載時間)。緩存文件應該被認爲是最新的60分鐘。在本地文件中緩存外部JSON API - 不起作用
我在這裏找到了答案5-minute file cache in PHP,但它不適合我。
我基本上是複製的代碼放到我自己的PHP文件:
....
//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載入我的網站,在該Highcharts的顯示結果,但顯然僅由API URL。我的cache.json文件保持空白。我給它chmod 777,所以我爲父目錄做了數據和dataCache。
爲了測試代碼,我試圖通過出註釋行
//$json = file_get_contents($api_url);
會發生什麼事,然後就是Highcharts完全不顯示任何數據進行調試。所以我瞭解到IF循環有點奏效 - 但不是它應該的方式。
然後我從API響應中複製了JSON數據,並將其保存到我的cache.json文件中。現在,我出注釋行
//$json = file_get_contents($api_url);
我希望,因爲我有一個新創建的cache.json文件,第一個IF條件將得到滿足,因此Highcharts會從我的緩存文件檢索數據。但是,這並沒有發生。 Highcharts不再顯示任何數據。
你能幫我理解爲什麼代碼不工作(雖然我基本上從這裏複製它5-minute file cache in PHP)?
P.S .:我不確定這可能只是一個「重複」的問題。但既然原始問題的答案對我來說不起作用,我不知道該如何/在哪裏問。
這個'https:// www.example.com/data/dataCache/cache.json'看起來不像本地文件。 – RiggsFolly