根据日期交替显示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>'; } } ?>
额外安全优化
当前逻辑仅限制了首页的跳转链接,若直接在地址栏输入对应日期的页面地址仍可访问未解锁内容,可做如下优化:
- 将
Days目录下所有.html后缀改为.php - 在每个日期页顶部增加访问权限判断,以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
相关产品推荐
相关产品推荐

