更改远程服务器上的JSON文件

时间:2019-06-24 11:52:12

标签: php remote-server

我有一个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数据保存到远程文件?

1 个答案:

答案 0 :(得分:0)

如何?

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

这对您有帮助吗?