php定时清理日志需用cron调用脚本,核心是glob遍历+filemtime判断+unlink删除;推荐用find命令替代,如find /var/log/myapp/ -name “*.log” -mtime +7 -delete,并注意权限、绝对路径及测试验证。
PHP 脚本里用 unlink() 清理旧日志文件最直接
PHP 本身没有内置定时任务能力,所谓“PHP 定时清理 logs”,本质是写一个 PHP 脚本负责删除过期日志,再靠系统级定时器(如 cron)定期调用它。脚本核心就是遍历日志目录、判断修改时间、用 unlink() 删除符合条件的文件。
常见错误是直接 filemtime() 拿到时间后硬写比较逻辑,却忽略时区或时间戳精度问题;更稳妥的做法是用 time() - $max_age 做基准,再跟 filemtime($file) 对比:
foreach (glob('/var/log/myapp/*.log') as $file) {
if (is_file($file) && filemtime($file) < time() - 86400 * 7) { // 7天前
unlink($file);
}
}
- 务必加
is_file($file)判断,避免符号链接或目录被误删 -
glob()返回空数组时循环不执行,无需额外判空 - 不要用
date('Y-m-d', ...)字符串比较,易出错且慢
cron 是唯一靠谱的“自动”触发方式
Windows 的计划任务、Linux 的 cron 才是真正执行定时动作的载体。PHP 脚本只是被调用的工具。写好脚本(比如叫 clean_logs.php)后,在终端运行 crontab -e 加一行:
0 2 * * * /usr/bin/php /path/to/clean_logs.php > /dev/null 2>&1
这表示每天凌晨 2 点执行。关键点:
立即学习“PHP免费学习笔记(深入)”;