首页 > 解决方案 > 更改远程服务器上的 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数据保存到远程文件?

标签: phpremote-server

解决方案


这个怎么样:

  • 将您的 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;

这对你有帮助吗?


推荐阅读