روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ دانشجوی سون‌لرن
درخواست راهنمایی در درک کد
جامعه پی اچ پی ایجاد شده در ۰۷ فروردین ۱۴۰۱

سلام. کد‌های زیر رو در فایل CacheUtilities.php داریم

namespace App\\Utilities;
use App\\Utilities\\Response;
class CacheUtility
{
    protected static $cache_file;
    protected static $cache_enabled = CACHE_ENABLED;
    const EXPIRE_TIME = 3600;   // 1 hour

    public static function init()
    {
        self::$cache_file = CACHE_DIR . md5($_SERVER['REQUEST_URI']) . ".json";
        if ($_SERVER['REQUEST_METHOD'] != 'GET')
            self::$cache_enabled = 0;
    }
    public static function cache_exists()
    {
        return (file_exists(self::$cache_file) && (time() - self::EXPIRE_TIME) < filemtime(self::$cache_file));
    }
    public static function start()
    {
        self::init();
        if (!self::$cache_enabled)
            return;
        if (CacheUtility::cache_exists()) {
            Response::setHeaders();
            readfile(self::$cache_file);
            // echo "\\n";exit;
        }
        ob_start();
    }
    public static function end()
    {
        if (!self::$cache_enabled)
            return;
        # Cache the contents to a cache file$cachedfile = fopen(self::$cache_file, 'w');
        fwrite($cachedfile, ob_get_contents());
        fclose($cachedfile);
        // alternative solution: file_put_contents(self::$cache_file,ob_get_contents());# Send the output to the browser
        ob_end_flush();
    }
    public static function flush()
    {
        $files = glob(CACHE_DIR . "*");             // get all file namesforeach ($files as $file)                   // iterate filesif (is_file($file))
                unlink($file);
    }
}

در اینجا دو حالت داریم:

۱- کش غیر فعال باشد: برنامه اجرا نمیشود. چون توی قسمت start و end هر دو return میشه

۲- کش فعال باشد (اینجا سه حالت داره)

الف: کش فعال است/فایل وجود دارد/تاریخ انقضای کش فایل درست است

در این حالت وارد قسمت start میشه. فایل خوانده میشه. سوال اول: چون در پایان قسمت start دستور exit اجرا میشه پس دیگه قسمت end یا هر چیزی بعد از اون باشه، اجرا نمیشه. درسته؟

ج: کش فعال است/فایل وجود دارد/تاریخ انقضای کش فایل درست است

در این حالت وارد قسمت start نمیشه و فایل خوانده نمیشه. ولی در قسمت end وارد میشه و فایل رو ایجاد میکنه و محتوا رو توی اون میزاره.

ب: کش فعال است/فایل وجود دارد/تاریخ انقضای کش فایل درست است

در این حالت وارد قسمت start نمیشه و فایل خوانده نمیشه. ولی در قسمت end میتونه وارد بشه و فایل رو بسازه. سوال دوم: فایل قبلی که وجود داره! چطوری میتونه یه فایل رو که وجود داره رو دوباره بنویسه؟ یا چطور قبل از پاک کردن فایل ابتدا اون رو ایجاد میکنه در صورتی که از قبل وجود داشته؟

سوال سوم: تابع flush در پایان کد چه موقع اجرا میشه؟ چون هیچ کنترلی نداره که میتونه هر فایل رو بعد از ایجاد پاک کنه! مثلا علی ۵ دقیقه قبل یه فایل براش ایجاد شد. الان من کا فایلم واسه دیروز بوده و اینجا وارد میشم، فایل علی رو هم پاک میکنه که!

مرسی میشم مرا از تاریکی‌های گیجی برهانید... :D

سلام دوست عزیز

داخل تلگرام به آی دی amir_programer_1380 پیام بدید تا به صورت ویس کامل بهتون توضیح بدم که چه اتفاقی داره میوفته تا ابهامات شما رفع بشه.

بهترین پاسخ
کیان سلگی ۰۷ فروردین ۱۴۰۱، ۱۰:۵۵