PHP:每 x 小时自动刷新一次的 JSON 文件

标签 php mysql json laravel

每次 map 坐标发生更改时,我都会发出一个 PHP 请求来查询数据库。这会返回一些 JSON 数据。我想每 5 小时发出一次请求,因为数据不会经常更改。如果这是不可能的,您是否建议生成一个每 5 小时刷新一次的静态 JSON 文档?我怎样才能做到这一点?

我在每个请求上查询数据库的实际代码如下所示:

public function getAgenciesJson() {
    if(Request::ajax()) { # Just validation to show/send data if requested
        $ne_lat = $_GET['ne_lat'];
        $sw_lat = $_GET['sw_lat'];
        $ne_lng = $_GET['ne_lng'];
        $sw_lng = $_GET['sw_lng'];

        $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1;
        $per_page = 2;

         if ($page > 1) { # && $page <= $total_pages) {
            $skip = ($page - 1) * $per_page;
        } else {
            // error - show first set of results
            $skip = 0;
        }

        $agencies = DB::table('users')
            ->select('user_id','type','c_name','c_logo','c_local','state','city','sn','col','lat','lng')
            ->skip($skip)
            ->take($per_page)             # Results per page
            ->where('active',1)
            ->whereNotNull('lat')
            ->whereNotNull('lng')
            ->whereRaw('lat < ? AND lat > ? AND lng < ? AND lng > ?',array($ne_lat,$sw_lat,$ne_lng,$sw_lng));

            if(isset($_GET['type_l'])==true && isset($_GET['type_a'])==true) {
                $agencies
                    ->orWhere('type','l')
                    ->where('type','a');
            } elseif (isset($_GET['type_l'])==true) {
                $agencies->where('type','l');
            } elseif (isset($_GET['type_a'])==true) {
                 $agencies->where('type','a');
            } else {
                $agencies
                    ->orWhere('type','l')
                    ->where('type','a');
            }

        $i=0;
        try {
            foreach($agencies->get() as $agency) {
                # Assign values
                $arr[$i]['a_id']      = $agency->user_id;
                $arr[$i]['type']      = $agency->type;
                $arr[$i]['name']      = $agency->c_name;
                $arr[$i]['logo']      = $agency->c_logo;
                $arr[$i]['local']     = $agency->c_local;
                $arr[$i]['state']     = $agency->state;
                $arr[$i]['city']      = $agency->city;
                $arr[$i]['address']   = ($agency->col) ? $agency->sn.', '.$agency->col : $agency->sn;
                $arr[$i]['latlon']    = array($agency->lng,$agency->lat);#$agency->lat.",".$agency->lng;#
                # Reset variables
                $i++;
                $latlon=NULL;
            }
        } catch(Exception $e) { $arr[0]['res'] = null; }

        $total      = $agencies->count();
        $meta = array(
            "page"       => $page,
            "per_page"   => $per_page,
            "count"      => $total,
            "total_pages"=> ceil($total/$per_page)
        );

        return Response::json(array('results'=>$arr,'meta'=>$meta));
    } else {
        App::abort(404);
    }
}

最佳答案

就像 Kepoly 在评论中所说,cron 是解决方案。如果您有权访问服务器并且使用 Debian/Ubuntu,请执行以下操作:

# crontab -e -u <your webserver account, usually www-data>

并输入:

0 00,05,10,15,20 * * * php <path to your script>

此任务将在“每天中午 12 点、上午 5 点、上午 10 点、下午 3 点和晚上 8 点的第 0 分钟”运行。

对于其他发行版应该有类似的方式

如果您无权访问服务器,您可以使用 webcron 服务,如下所示:http://www.mywebcron.com/

关于PHP:每 x 小时自动刷新一次的 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103844/

相关文章:

php - 如何在 Laravel 5.3 中对多张图片上传进行验证

php - 从 MySQL 数据库中获取后,在浏览器上永久显示 html 表单输入?

c++ - boost ptree 即时修改值数组

javascript - 在 Axios 中禁用 JSON 解析

javascript - Node.js/javascript 像 PHP 中的 mcrypt_ecb 一样加密 AES-128

php:设置项目的根目录?

php - CakePHP 递归删除

mysql - 存储 JWT token 的最佳 MYSQL 或 Maria DB 数据类型是什么?

PHP:base64_encode 是否可以防止 mysql 注入(inject)?

java - 找不到包名称 'com.example.pc.fireApp' 的匹配客户端