PHP, Codeigniter
codeigniter4 파일형태 캐시 활용하기
beop07
2023. 3. 21. 20:55
매 페이지를 갱신할때마다 데이터베이스를 조회하여 자원낭비를 방지하기 위해
캐시역할을 하는 파일을 만들어 활용하는 방법이다.
모델 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 파일 캐시
반응형