如何使用PHP MySQL实现每周日晚9点自动加载页面?
实现每周日晚9点自动执行PHP MySQL插入任务
看起来你想让这段插入日期的代码每周日晚9点自动运行对吧?咱们得先明确一点:PHP脚本本身没办法主动定时触发执行,得借助操作系统的定时任务工具来实现,下面分两种常见系统给你说具体做法:
一、先优化你的PHP代码(重要!)
你现在的代码存在SQL注入风险,而且数据库连接后没有关闭,我给你调整成更安全规范的版本,保存为单独的脚本文件(比如auto_insert_date.php):
<?php date_default_timezone_set("Asia/Kolkata"); // 使用mysqli面向对象方式,代码更易维护 $con = new mysqli("localhost", "root", "", "chat"); // 检查数据库连接 if ($con->connect_error) { die("连接MySQL失败: " . $con->connect_error); } $current_date = date('Y-m-d'); $date_title = "TODAY"; // 使用预处理语句彻底避免SQL注入风险 $stmt = $con->prepare("INSERT INTO date(date_title, date) VALUES (?, ?)"); $stmt->bind_param("ss", $date_title, $current_date); // 执行插入并记录日志,方便排查问题 if ($stmt->execute()) { file_put_contents("auto_insert_log.txt", date('Y-m-d H:i:s') . " 日期插入成功\n", FILE_APPEND); } else { file_put_contents("auto_insert_log.txt", date('Y-m-d H:i:s') . " 插入失败: " . $stmt->error . "\n", FILE_APPEND); } // 关闭资源,避免内存泄漏 $stmt->close(); $con->close(); ?>
二、设置定时任务
1. Linux/macOS系统(用Cron定时工具)
Cron是类Unix系统自带的定时任务管理器,操作步骤如下:
- 打开终端,输入
crontab -e编辑你的定时任务列表 - 添加一行定时规则,对应每周日晚9点执行脚本:
0 21 * * 0 php /绝对路径/到/你的/auto_insert_date.php
给你拆解下这个Cron表达式的意思:
0:分钟(指定0分,也就是整点执行)21:小时(21点,对应晚9点)*:匹配每个月份*:匹配当月每一天0:匹配周日(Cron里周日可以用0或7,这里用0就行)php:如果系统找不到php命令,用which php查询实际路径替换,比如/usr/bin/php/绝对路径/到/你的/auto_insert_date.php:替换成你脚本的真实绝对路径
保存退出后,Cron就会自动按照规则执行任务了,你可以用crontab -l查看已设置的任务。
2. Windows系统(用任务计划程序)
Windows用自带的「任务计划程序」来实现定时执行:
- 打开「任务计划程序」,点击左侧「创建基本任务」
- 给任务起个好记的名字,比如「每周日插入日期到MySQL」,点击下一步
- 触发器选择「每周」,下一步后设置执行周期为每周日,开始时间选21:00,点击下一步
- 操作选择「启动程序」,下一步后:
- 「程序或脚本」选择你的PHP.exe路径(比如
C:\php\php.exe) - 「添加参数」填写脚本的绝对路径(比如
C:\网站目录\auto_insert_date.php)
- 「程序或脚本」选择你的PHP.exe路径(比如
- 点击下一步,勾选「当单击完成时,打开此任务的属性对话框」,再点击完成
- 在属性窗口里可以设置「不管用户是否登录都运行」,确保任务能正常触发
三、额外注意事项
- 确保运行定时任务的系统用户,有脚本文件的读取权限和数据库的操作权限
- 先手动运行脚本
php auto_insert_date.php测试,确认能正常插入数据后再设置定时任务 - 日志文件
auto_insert_log.txt会帮你排查执行失败的问题,记得定期清理避免占用空间
内容的提问来源于stack exchange,提问作者user7208162
相关产品推荐
相关产品推荐

