Typecho typecho 随机生成当前日期一个星期内的日期,并缓存成txt文件


这么一个奇怪的要求,是我因为的下载站有很多字体文件,一旦发布后就基本后续不会再有新版本更新,因为字体文件也没什么好更新的,所以大部分的字体都是发布了一段时间了,这就导致日期都是显示在2022年或者更早的日期,我感觉这样看起来不舒服。

所以就写了这么一段代码

<?php

date_default_timezone_set('Asia/Shanghai');

// 指定缓存文件的路径

$cacheDir = __DIR__ . '/cache';

$cacheFile = $cacheDir . '/random_date_cache.txt';

// 如果缓存目录不存在,则创建它

if (!is_dir($cacheDir)) {

    mkdir($cacheDir, 0755, true);

}

// 尝试从缓存文件中读取随机日期

if (file_exists($cacheFile)) {

    $data = file_get_contents($cacheFile);

    $data = explode('|', $data);

    $cachedDate = $data[0];

    $expiry = $data[1];

    // 检查缓存是否过期

    if (time() < $expiry) {

        // 缓存有效,使用缓存的日期

        $randomDate = $cachedDate;

    } else {

        // 缓存过期,生成新的随机日期

        $randomDate = generateRandomDate();

        $expiry = time() + (48 * 60 * 60); // 设置新的过期时间

        file_put_contents($cacheFile, "$randomDate|$expiry");

    }

} else {

    // 缓存文件不存在,生成新的随机日期

    $randomDate = generateRandomDate();

    $expiry = time() + (48 * 60 * 60); // 设置过期时间

    file_put_contents($cacheFile, "$randomDate|$expiry");

}

// 输出随机日期

echo $randomDate;

// 函数:生成随机日期

function generateRandomDate() {

    $seed = date('Yz');

    mt_srand((int)$seed);

    $randomDays = mt_rand(1, 7);

    $randomDateTimestamp = strtotime("-{$randomDays} days");

    return date("Y-m-d", $randomDateTimestamp);

}

?>

我的做法的是把这一段代码保持成php文件 比如date.php

然后在需要显示这个日期的地方 

<?php $this->need('date.php'); ?>

这样就可以了

具体看下面图片

在有效时间内。刷新页面这个日期不会变化,如果过了有效时间后就会自动生成一个txt文件 random_date_cache.txt。

这样就实现看起来 每周都在更新这些。。。



扫描下方二维码 关注我的微信公众号 #关注微信公众号 - 更多福利 .png