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);

?>


上一篇:12月8日星期日,农历冬月初八,工作愉快,平安喜乐

下一篇:12月9日星期一,农历冬月初九,工作愉快,平安喜乐

网友评论