php代码|记录所有文件的更新时间
时间:2024-12-08 21:42:43 阅读:208
有一些吊毛喜欢入侵修改一些代码,所以弄了这个,如果出现代码有更新,就自动记录下来
首先创建一个文件夹比如jilu,然后在文件夹内创建jilu.php文件,把下面代码复制进去。把目录路劲改为自己的就好了
再到宝塔面板→计划任务https://网址/jilu/jilu.php,设置10-30分钟启动一次即可,会自动把更改过的内容,以TXT文件记录下来
<?php // 要检测的多个目录的数组,你可以在这里添加更多需要检测的目录路径 $targetDirs = [ '/www/wwwroot/www.xinxinkamiwang.com' // 示例,添加更多目录路径即可 //'/www/wwwroot/another_directory', //'/www/wwwroot/www.cqkmk.cn' ]; // 用于存储之前记录的文件修改时间信息(格式:文件路径 => 上次修改时间的日期时间字符串) $previousStates = []; // 检查并创建chuqi.txt文件,如果不存在就创建一个空文件 if (!file_exists('chuqi.txt')) { file_put_contents('chuqi.txt', ''); } // 读取chuqi.txt文件内容,解析到previousStates数组中,过滤掉chuqi.txt自身的记录 $content = file_get_contents('chuqi.txt'); $lines = explode("\n", $content); foreach ($lines as $line) { if (trim($line)!= '') { list($lastModified, $filePath) = explode(',', $line); if ($filePath!= 'chuqi.txt') { $previousStates[trim($filePath)] = $lastModified; } } } function generateLogFileName() { return date('Y年m月d日-H:i:s'). '_genggai.txt'; } // 用于存储此次检测到的更改文件信息 $changedFiles = []; // 定义一个数组,存放要过滤的文件夹名称,可在这里添加更多要过滤的文件夹名 $filterDirs = ['data', 'faka', 'uploads', 'other_folder_2']; // 递归遍历目录及子目录的函数,添加过滤逻辑,过滤掉文件名包含特定字符串的文件以及指定的文件夹 function scanDirectory($dir, &$previousStates, &$changedFiles, $filterDirs = []) { $files = scandir($dir); foreach ($files as $file) { if ($file!= '.' && $file!= '..') { $filePath = $dir. '/'. $file; $fileName = basename($filePath); // 获取当前文件或文件夹的基本名称(去掉路径部分) // 判断当前文件是否包含要过滤的文件名部分,如果包含则跳过后续处理 if (strpos(strtolower($fileName), 'chuqi.txt')!== false || strpos(strtolower($fileName), 'genggai.txt')!== false || in_array(strtolower($fileName), $filterDirs)) { continue; } if (is_dir($filePath)) { scanDirectory($filePath, $previousStates, $changedFiles, $filterDirs); } else { $currentModified = filemtime($filePath); $currentDateTime = date('时间:Y年m月d日 H:i:s', $currentModified); if (!isset($previousStates[$filePath]) || $previousStates[$filePath]!= $currentDateTime) { $changedFiles[] = $filePath; $previousStates[$filePath] = $currentDateTime; } } } } } // 遍历每个目标目录进行检测 foreach ($targetDirs as $targetDir) { scanDirectory($targetDir, $previousStates, $changedFiles, $filterDirs); } if (!empty($changedFiles)) { $newLogFile = generateLogFileName(); $newContent = ''; foreach ($changedFiles as $changedFile) { $newContent.= date('时间:Y年m月d日-H:i:s', filemtime($changedFile))." 文件:{$changedFile}". "\n"; } file_put_contents($newLogFile, $newContent); echo "<title>发现最新内容</title>"; echo "以下文件发生了更改,已记录到新文件 {$newLogFile} 中:\n"; foreach ($changedFiles as $changedFile) { echo $changedFile. "\n"; } } else { echo "<title>未检测到文件有更改</title>"; echo "未检测到文件有更改。"; } // 更新chuqi.txt文件内容,将最新的文件状态记录进去(排除chuqi.txt自身)<title> $updatedContent = ''; foreach ($previousStates as $filePath => $lastModified) { if ($filePath!= 'chuqi.txt') { $updatedContent.= "{$lastModified},". $filePath. "\n"; } } file_put_contents('chuqi.txt', $updatedContent); ?>
网友评论