You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据日期交替显示URL:圣诞降临历PHP脚本运行异常如何解决?

圣诞降临历网页PHP逻辑修复方案

原有代码的核心问题

  • date(j)的参数缺少引号:PHP中date()函数的格式控制符必须为字符串类型,未加引号会被识别为未定义常量,抛出警告同时输出错误的日期值,导致页面渲染异常。
  • if判断误用赋值运算符:if ($day = 1)是直接给$day赋值为1,表达式永远返回true,导致else分支永远不会执行,无论当天是几号都会跳转至1号页面。
  • 代码冗余扩展性差:当前仅实现了1号的逻辑,要完成24天的降临历功能需要重复编写23次判断,维护成本高易出错。

修复后的可运行代码

<?php
// 可选:限制仅12月可访问降临历
if ((int)date('n') !== 12) {
    echo '<p>圣诞降临历仅在每年12月开放哦</p>';
    exit;
}
// 获取当前日期的日数(不带前导零)
$current_day = (int)date('j');
// 循环生成1-24号的跳转盒子
for ($day_num = 1; $day_num <= 24; $day_num++) {
    if ($day_num <= $current_day) {
        // 已到日期跳转对应内容页
        echo '<a href="Days/'.$day_num.'.html" id="'.$day_num.'">
            <div class="box">
                <h2>'.$day_num.'</h2>
            </div>
        </a>';
    } else {
        // 未到日期跳转错误页
        echo '<a href="Days/error.html" id="'.$day_num.'">
            <div class="box">
                <h2>'.$day_num.'</h2>
            </div>
        </a>';
    }
}
?>

额外安全优化

当前逻辑仅限制了首页的跳转链接,若直接在地址栏输入对应日期的页面地址仍可访问未解锁内容,可做如下优化:

  1. 将Days目录下所有.html后缀改为.php
  2. 在每个日期页顶部增加访问权限判断,以2号页面2.php为例:
<?php
// 页面顶部增加判断
$allow_access_day = 2;
if ((int)date('j') < $allow_access_day || (int)date('n') !== 12) {
    header('Location: ../error.html');
    exit;
}
?>
<!-- 原有页面内容写在下方即可 -->

内容的提问来源于stack exchange,提问作者ahoi_prause

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:54:02