php - 更改远程服务器上的 JSON 文件
问题描述
我有一个 api 来获取一些 JSON 格式的数据(限制每 1 分钟调用一次),我希望所有有权访问服务器的用户都可以使用该 api。
我有一个 php 代码从 api 获取内容,然后JSON
在 javascript 文件中使用该对象。但是如果有多个用户访问网站,每分钟调用 api 多次,所以只有 1 个人获取数据,其他人不获取。
这样的事情有没有好的解决方案?
我尝试将JSON
对象保存到远程文件中,然后访问该网站的每个人都会读取JSON
每分钟更改一次的文件,但由于某种原因,远程服务器上的JSON
文件并非每分钟更新一次。是权限问题吗?
在 php 文件中,我用来"file_get_contents"
从 rest api 获取 json。然后我保存数据:"file_put_contents"
是否有不同的解决方案可以将 JSON 数据(每 1 分钟更新一次)提供给访问该网站的每个人,以便在 javascript 文件中使用?
如何每隔一分钟将json数据保存到远程文件?
解决方案
这个怎么样:
- 将您的 API 数据保存在文件中。
- 将您对 API 数据的最后一次调用保存在另一个文件中。
- 当用户需要您的数据时,请检查最后一次 API 调用。
- 如果不到 1 分钟,则从保存的文件中获取数据。
- 如果超过一分钟,获取新数据,将其保存到文件中,更新时间日志,然后将数据提供给用户。
例如,假设用户访问您的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;
这对你有帮助吗?
推荐阅读
- string - 如何在 pandas df 中绘制与字符串数组关联的值?
- c# - 需要创建一个webservice来在同一个应用的两个版本之间发送消息
- python - OpenCV cv2.seamlessClone 中的边界错误
- python - 对象传递对象
- c# - 如何在 ASP.NET Core 中将 DateTime 转换为 Date(使用数据库)
- python - 如何在python3中将多行字符串读取为文件流?
- java - Selenium 的“sendKeys”方法是否首先对目标元素执行“点击”?
- javascript - 从索引 1 开始 lodash 地图
- c# - 如何构建一套 Unity 游戏来共享具有通用功能的脚本?
- python-3.x - 对空值的熊猫系列执行算术运算,主要是减法和除法