如何用PHP实现按固定时间段将访客重定向到不同URL
代码问题排查
原有代码无法正常运行的核心问题如下:
- 使用
date("h:i")获取的是12小时制时间,会出现下午时段判断错误的问题,应该替换为24小时制的H:i格式 - 代码中存在
echo、var_dump等输出语句,会提前发送响应头,导致后续header()跳转语句失效 - 后续的概率数组生成逻辑完全错误,无意义且会触发数组下标越界报错
- 未添加默认跳转规则,当时间不在你定义的所有时段范围内时,
$urls变量未定义会触发致命错误 - 实体转义符
>、"等是HTML转义后的内容,在PHP代码中要还原为正常的符号
可直接使用的修复后代码
这段代码同时支持你要的「固定时间段跳转」和「每10分钟循环跳转」两种模式,按需选择配置即可:
<?php // 配置区域 // 模式1:自定义固定时间段跳转(不需要就注释掉这段,启用模式2) $timeRules = [ '06:10-06:20' => 'https://google.com', '06:20-06:30' => 'https://gmail.com', // 按格式继续加其他时间段规则即可 ]; // 模式2:每N分钟循环跳转(不需要就注释掉这段,启用模式1) // $cycleMinutes = 10; // 每10分钟换一次跳转地址 // $cycleUrls = [ // 'https://google.com', // 'https://gmail.com', // // 按顺序加要循环跳转的地址即可 // ]; $defaultUrl = 'https://example.com'; // 所有规则都不匹配时的默认跳转地址 // 逻辑执行区域 date_default_timezone_set('Asia/Shanghai'); // 替换为你所在的时区,避免时间判断偏差 $currentTime = date('H:i'); $targetUrl = $defaultUrl; // 执行模式1逻辑 if (isset($timeRules) && !empty($timeRules)) { foreach ($timeRules as $timeRange => $url) { list($start, $end) = explode('-', $timeRange); if ($currentTime >= $start && $currentTime < $end) { $targetUrl = $url; break; } } } // 执行模式2逻辑 elseif (isset($cycleMinutes) && !empty($cycleUrls)) { $currentTimestamp = time(); $cycleSeconds = $cycleMinutes * 60; $cycleIndex = floor($currentTimestamp / $cycleSeconds) % count($cycleUrls); $targetUrl = $cycleUrls[$cycleIndex]; } // 执行跳转 header('Location: ' . $targetUrl); exit(); ?>
使用说明
- 如果要使用固定时间段跳转,保留
$timeRules配置段,注释掉$cycleMinutes和$cycleUrls的配置,按示例格式添加你的时间段和对应跳转地址即可 - 如果要使用每N分钟循环跳转,注释掉
$timeRules配置段,保留$cycleMinutes和$cycleUrls配置,设置你要的循环间隔和跳转地址列表即可 - 注意修改时区配置为你实际所在地的时区,避免时间判断出现偏差
- 代码上传到你的域名根目录命名为index.php即可生效
内容的提问来源于stack exchange,提问作者Dvsh
相关产品推荐
相关产品推荐

