https://www.php-cache.com/en/latest/ var ama kendinden çok basit yapabilirsin
<?php

$cache_file = __DIR__ . '/cache/' . md5($_SERVER['REQUEST_URI']) . '.html';
$cache_time = 300; // 5 dakika

// Cache varsa göster
if (
    file_exists($cache_file) &&
    (time() - filemtime($cache_file) < $cache_time)
) {
    readfile($cache_file);
    exit;
}

// Cache yoksa çıktı tamponlamayı başlat
ob_start();

?>
<!DOCTYPE html>
<html>
<head>
    <title>Örnek Sayfa</title>
</head>
<body>

<h1>Merhaba</h1>
<p>Oluşturulma zamanı: <?= date('Y-m-d H:i:s') ?></p>

</body>
</html>
<?php

$html = ob_get_contents();
ob_end_flush();

// Cache klasörü yoksa oluştur
if (!is_dir(__DIR__ . '/cache')) {
    mkdir(__DIR__ . '/cache', 0777, true);
}

// HTML'i cache'e yaz
file_put_contents($cache_file, $html, LOCK_EX);
Yada
<?php

$cache_time = 300;

$cache_key = md5($_SERVER['REQUEST_URI']);
$cache_file = __DIR__ . '/cache/' . $cache_key . '.html';

if (
    file_exists($cache_file) &&
    (time() - filemtime($cache_file) < $cache_time)
) {
    readfile($cache_file);
    exit;
}

ob_start(function ($buffer) use ($cache_file) {

    if (!is_dir(dirname($cache_file))) {
        mkdir(dirname($cache_file), 0777, true);
    }

    file_put_contents($cache_file, $buffer, LOCK_EX);

    return $buffer;
});