매 페이지를 갱신할때마다 데이터베이스를 조회하여 자원낭비를 방지하기 위해
캐시역할을 하는 파일을 만들어 활용하는 방법이다.
모델 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 파일 캐시
반응형
'PHP, Codeigniter' 카테고리의 다른 글
php 객체를 배열로, 배열을 객체로 (0) | 2023.03.27 |
---|---|
php 양음부호 대체하는 함수 만들기 (0) | 2023.03.22 |
주가연동 API XML형식 PHP 배열로 받아오기 (1) | 2021.09.24 |
php 실제 존재하는 날짜 체크 (0) | 2021.05.21 |
php 배열 삭제 unset이용 (0) | 2021.05.05 |
댓글