Tạo cache cho trang web bằng PHP

Cache (bộ đệm) là kỹ thuật quan trọng giúp website tải nhanh hơn bằng cách tránh xử lý lại nội dung động mỗi khi người dùng truy cập. Bài viết này chia sẻ một cách tạo cache cực kỳ đơn giản bằng PHP thuần – không cần framework hay thư viện.

Tạo cache cho trang web bằng PHP

1. Đặt mã tạo cache ở đầu trang

Chèn đoạn mã sau vào đầu mỗi trang PHP (trước bất kỳ dòng HTML nào):

<?php
$cache_ext    = '.html';             // Phần mở rộng của file cache
$cache_time   = 43200;               // Thời gian cache tồn tại (giây)
$cache_folder = 'cache/';            // Thư mục lưu cache
$ignore_pages = [''];                // Những URL không cache

$dynamic_url  = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING'];
$cache_file   = $cache_folder . md5($dynamic_url) . $cache_ext;
$ignore       = in_array($dynamic_url, $ignore_pages);

if (!$ignore && file_exists($cache_file) && (time() - filemtime($cache_file)) < $cache_time) {
    ob_start('ob_gzhandler'); // Nén gzip nếu có thể
    readfile($cache_file);
    echo '<!-- Cached page - ' . date('Y-m-d H:i:s', filemtime($cache_file)) . ' -->';
    ob_end_flush();
    exit;
}

ob_start('ob_gzhandler');
?>

Giải thích:

  • Cache theo URL: mỗi trang được lưu với tên file hash riêng biệt
  • Không cache trang trong mảng $ignore_pages
  • Nén gzip nếu trình duyệt hỗ trợ

2. Đặt mã lưu nội dung vào cuối trang

Ngay trước thẻ </html> hoặc cuối file PHP, thêm đoạn sau để ghi nội dung vào cache:

<?php
if (!is_dir($cache_folder)) {
    mkdir($cache_folder, 0755, true);
}

if (!$ignore) {
    $fp = fopen($cache_file, 'w');
    fwrite($fp, ob_get_contents());
    fclose($fp);
}
ob_end_flush();
?>

3. Tùy chỉnh cache

  • Thời gian cache: chỉnh $cache_time (tính bằng giây)
  • Xóa cache: vào thư mục cache/ và xóa file tương ứng
  • Không cache những URL động (ví dụ admin, trang đăng nhập…): thêm vào mảng $ignore_pages

4. Gợi ý cải tiến

  • Thêm điều kiện chỉ tạo cache khi HTTP Method là GET
  • Thêm chức năng tự xóa cache cũ định kỳ bằng cron hoặc khi đăng bài mới
  • Thêm subfolder theo ngày để quản lý cache gọn hơn

Kết luận

Đây là một kỹ thuật nhỏ nhưng hiệu quả, từng là “ông tổ của cache thủ công” trong thời kỳ PHP + MySQL thuần chưa có framework. Dù ngày nay có nhiều giải pháp cao cấp hơn như object cache, page cache bằng Redis, plugin chuyên dụng…, nhưng đôi khi chính những cách làm cơ bản thế này lại giúp bạn hiểu rõ cơ chế hoạt động phía sau một cách sâu sắc hơn.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...