본문 바로가기
PHP, Codeigniter

codeigniter4 파일형태 캐시 활용하기

by beop07 2023. 3. 21.

매 페이지를 갱신할때마다 데이터베이스를 조회하여 자원낭비를 방지하기 위해

캐시역할을 하는 파일을 만들어 활용하는 방법이다.

 

모델 CacheModel.php

<?php
namespace App\Models\Common;

use CodeIgniter\Model;

class CacheModel extends Model
{
    /**
     * makeCacheFile
     *
     * @param array $data
     * @param string $fileNm
     * @return bool
     */
    public static function makeCacheFile($data, $fileNm)
    {
        if (is_array($data)) {
            $data = serialize($data);
            $fp = fopen(FCPATH . 'uploads/cache/' . $fileNm, 'w');
            fwrite($fp, print_r($data, TRUE));
            fclose($fp);
            return true;
        } else {
            return false;
        }
    }

    /**
     * readCacheFile
     * @param string $fileNm
     * @return array
     */
    public static function readCacheFile($fileNm)
    {

        $fp = fopen(FCPATH . 'uploads/cache/' . $fileNm, 'r');
        $data = '';
        while(!feof($fp)){
            $data .= fgets($fp);
        }
        fclose($fp);
        $data = unserialize($data);
        if (!$data) $data = [];
        return $data;
    }
}

 

컨트롤러 Dashboard.php

<?php

namespace App\Controllers\Admin;

use App\Controllers\Admin\AdminBaseController;
use App\Models\Common\TriggerModel;
use App\Models\Common\CacheModel;

class Dashboard extends AdminBaseController
{
    protected $DashboardModel;
    protected $StatisticsModel;
    public function __construct()
    {
        $this->DashboardModel = model('/Admin/AdminDashboardModel');
        $this->StatisticsModel = model('/Admin/AdminStatisticsModel');
    }

    public function index()
    {
        // Check Trigger
        $triggerCheck = TriggerModel::check('dashboard_log'); // 일정 시간마다 실행하는 트리거
        if ($triggerCheck) {
            $cachedata = []; // <--- 데이터 처리를 하면된다.
            CacheModel::makeCacheFile($cachedata, 'dashboard_log.php');
        }
        $data = CacheModel::readCacheFile('dashboard_log.php');
        return render(admin_view('/dashboard/dashboard'), $data);
    }
}

 

/public/uploads/cache/ 경로에 파일이 저장되어 활용된다.

해당 경로에 직접 접근을 막기위해 .htaccess 파일도 생성해준다.

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

 

 ※ 키워드 : php 파일형태로 캐싱, 파일형태로 캐시, 캐시파일 만들기, codeigniter4 파일 캐시

반응형

댓글