<?php
// Öncelikle cache kullanımı kontrol edilir
$nocache = explode(",", tanim("nocache", "n1", 0));
$nc = 0;
foreach ($nocache as $q) {
    if (strpos($q, $sayfa[0]) !== false || strpos($q, $sayfa) !== false) {
        $nc++;
    }
}
// Cache kullanımına izin veriliyorsa ve sayfa uygun ise işlem yapılır
if ($module["cache"] == 1 && ($sayfa[0] !== "e" && $sayfa[0] !== "p") && $nc == 0) {
    class Cache {
        public $start_time;
        public $cache_file;
        public $to_create;
        function __construct() {
            $this->to_create = true;
            $this->Start();
        }
        // Cache başlangıcı
        function Start() {
            global $module;
            $this->start_time = microtime(true);
            $cache_time = $module["cache_time"];
            // Cache key oluşturulurken sadece önemli GET parametreleri ekleniyor
            $str = 'https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
            $query_params = [];
            // Önemli GET parametrelerini seçelim
            if (!empty($_GET)) {
                foreach ($_GET as $k => $v) {
                    // Örneğin, sadece 'filter', 'page', vb. parametreleri dahil edebiliriz
                    if (in_array($k, ['filter', 'page'])) {
                        $query_params[$k] = $v;
                    }
                }
            }
            // GET parametreleri ekleniyor
            ksort($query_params);
            foreach ($query_params as $k => $v) {
                $str .= $k . $v;
            }
            // Cache dosyasının yolu belirleniyor
            $this->cache_file = $_SERVER['DOCUMENT_ROOT'] . "/deppo/cache/" . md5($str) . ".html";
            // Eğer cache dosyası geçerliyse, hemen yükleyelim
            if (file_exists($this->cache_file) && (time() - $cache_time < filemtime($this->cache_file))) {
                include($this->cache_file);
                $this->to_create = false;
                exit;  // Cache kullanıldı, işlem sonlandırılır
            }
            // Cache dosyası geçerli değilse, tampon başlatılır
            ob_start();
        }
        // Cache dosyasını kaydet
        function End() {
            // Cache içeriğini dosyaya yazıyoruz
            if ($fp = fopen($this->cache_file, 'w')) {
                if (fwrite($fp, ob_get_contents()) === false) {
                    error_log("Cache dosyasına yazılamadı: " . $this->cache_file);
                }
                fclose($fp);
            } else {
                error_log("Cache dosyasına yazılamadı: " . $this->cache_file);
            }
            ob_end_flush();
        }
        // Cache sınıfı sonlandığında, cache dosyasını oluştur
        function __destruct() {
            if ($this->to_create) {
                $this->End();
            }
        }
    }
    // Cache dosyalarını kontrol edip eski olanları temizleyelim
    $cdir = $_SERVER['DOCUMENT_ROOT'] . "/deppo/cache/";
    foreach (glob($cdir . "*") as $cfile) {
        // Geçersiz dosyalar silinir
        if (filemtime($cfile) < time() - $module["cache_time"]) {
            unlink($cfile);
        }
    }
    // Yeni cache sınıfı oluşturuluyor
    $cache = new Cache();
}
?>