php代码|记录所有文件的更新时间
时间:2024-12-08 21:42:43 阅读:286
有一些吊毛喜欢入侵修改一些代码,所以弄了这个,如果出现代码有更新,就自动记录下来
首先创建一个文件夹比如jilu,然后在文件夹内创建jilu.php文件,把下面代码复制进去。把目录路劲改为自己的就好了
再到宝塔面板→计划任务https://网址/jilu/jilu.php,设置10-30分钟启动一次即可,会自动把更改过的内容,以TXT文件记录下来
Markup
<?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);
?>
复制成功!
网友评论