学渣笔记
 
 
 

用PHP监控webapps目录下的jsp文件是否发生变化

王朝干货·学渣笔记  2026-08-19
宽屏版  字体:  |  |  | 超大

#!/usr/bin/env php
<?php
/**
* 每日对比 /usr/local/tomcat/webapps 下所有 .jsp 文件
* 用法:php /path/to/compare_jsp.php
* 建议加入 crontab 每日运行
*/
define('TARGET_DIR', '/usr/local/tomcat/webapps');
define('CACHE_FILE', '/var/tmp/jsp_files_cache.json'); // 存放前一天结果
/**
* 扫描目录,返回包含文件名和大小(字节)的数组
*/
function scanJspFiles($dir) {
$result = [];
if (!is_dir($dir)) {
return $result;
}
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS)
);
foreach ($iterator as $file) {
if ($file->isFile() && strtolower($file->getExtension()) === 'jsp') {
$result[] = [
'name' => $file->getPathname(), // 完整路径
'size' => $file->getSize()
];
}
}
// 按路径排序,确保不同机器/时间扫描顺序一致
usort($result, function($a, $b) {
return strcmp($a['name'], $b['name']);
});
return $result;
}
/**
* 比较两个数组是否完全相同(忽略键顺序,但元素顺序已排序)
*/
function arraysAreEqual($arr1, $arr2) {
// 先比较数量
if (count($arr1) !== count($arr2)) {
return false;
}
// 逐项比较(因为已排序,可直接比较)
foreach ($arr1 as $index => $item) {
if ($item['name'] !== $arr2[$index]['name'] || $item['size'] !== $arr2[$index]['size']) {
return false;
}
}
return true;
}
// ---------- 主流程 ----------
$todayData = scanJspFiles(TARGET_DIR);
// 读取缓存(前一天的数据)
$yesterdayData = [];
if (file_exists(CACHE_FILE)) {
$json = file_get_contents(CACHE_FILE);
$yesterdayData = json_decode($json, true);
if (!is_array($yesterdayData)) {
$yesterdayData = []; // 损坏则视为空
}
}
// 比较
if (arraysAreEqual($todayData, $yesterdayData)) {
echo "OKn"; // 相等
// 此处可添加成功后的业务逻辑
} else {
echo "CHANGEDn"; // 不相等,可发告警等
// 此处可添加变更处理
}
// 将今天的数据保存为明天的缓存
file_put_contents(CACHE_FILE, json_encode($todayData, JSON_PRETTY_PRINT));

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝网络 版权所有