我有一个api以JSON格式获取一些数据(每1分钟通话限制),并且我希望该api对所有有权访问服务器的用户可用。
我有一个php代码,它从api获取内容,然后在JavaScript文件中使用该JSON
对象。但是,如果有多个用户访问该网站,则每分钟会多次调用该api,因此只有1个人获取数据,而其他人则没有。
对这样的东西有很好的解决方案吗?
我尝试将JSON
对象保存到远程文件中,然后每个访问网站的人都会读取JSON
文件,该文件每分钟更改一次,但由于某种原因在远程服务器上JSON
文件不是每分钟更新一次。是权限问题吗?
在php文件中,我使用"file_get_contents"
从rest api获取json。
然后我保存数据:"file_put_contents"
是否存在另一种解决方案,以使JSON数据(每1分钟更新一次)提供给每个可在javascript文件中使用的网站访问者?
如何每隔一分钟将json数据保存到远程文件?
答案 0 :(得分:0)
如何?
例如,假设用户转到您的index.php
页面:
// lets define the working files
define("FILE_API_TIMESTAMP", "api.timestamp.txt");
define("FILE_API_DATA", "api.data.json");
// initialize main vars
// last api call
$last_call = 0;
// latest api data
$api_data = false;
// this moment timestamp
$current_time = time();
// check last api call from saved file
if (file_exists(FILE_API_TIMESTAMP)) {
$last_call = floatval( file_get_contents( FILE_API_TIMESTAMP ) );
}
// if more than 60 seconds passed since last call,
// call API then save results
if ($current_time - $last_call > 60) {
// get new data
// $api_data = getApiData(); -> put your function here: Curl etc...
$api_data = "new data: ".time(); // just an example
if ($api_data) {
// if new data is available,
// - log the current timestamp
file_put_contents(FILE_API_TIMESTAMP, $current_time);
// update $last_call for later use
$last_call = $current_time;
// - save the new data
file_put_contents(FILE_API_DATA, $api_data);
}
}
// check if we have new data, if not bring old data
if (!$api_data) {
if (file_exists(FILE_API_DATA))
$api_data = file_get_contents(FILE_API_DATA);
else
$api_data = "no_data";
}
// finally, give the user the updated data:
echo "Data updated at: ".date("d-m-Y H:i:s", $last_call);
echo "<hr/>";
echo $api_data;
这对您有帮助吗?