PHP监控服务器文件目录
PHP监控服务器文件目录
目录监控的实现原理是记录被监控目录(包含子目录)下的文件的MD5值,并保存Log,当第二次重新扫描该目录的时候,与上一次的LOG进行比较,从而获知文件的“新增”、“编辑”、“删除”等情况。
注意事项:
1、md5_file在处理大文件的时候效率不高,因此如果目录中存在较大文件,请自行加入一个忽略选项,将该文件忽略,否则会影响执行时间。
2、如果您使用的是Linux服务器,那么请自行建立相应的Log文件,并设置权限为可写。
完整的代码如下:
<?php
/**
*
* 目录监控
*
* @author 郭瑞超 (grc1988#gmail.com)
* @date 2009-04-15
* @license BSD
* @package common
* @version 0.0.1
*
**/
set_time_limit(0);
define('M_PATH','.'); //设置监控的目录,当前目录为'.',上一级目录为'..',也可以设置绝对路径,后面不要加斜杠
define('M_LOG','../m.log'); //设置存储log的路径,可以放置在任意位置
$file_list = array();
function record_md5($dir){
global $file_list;
if(is_dir($dir)){
$file=scandir($dir);
foreach($file as $f){
if($f!='.' && $f!='..'){
$path = $dir.'/'.$f;
if(is_dir($path)){
record_md5($path);
}else{
$file_list[$path]=md5_file($path);
}
}
}
}
}
record_md5(M_PATH);
if(file_exists(M_LOG)){
$log = unserialize(file_get_contents(M_LOG));
}else{
$log = array();
}
file_put_contents(M_LOG,serialize($file_list));
if(count($file_list) > 0 ){
foreach($file_list as $file => $md5){
if(!isset($log[$file])){
print '新增:'.$file.'<br />';
}else{
if($log[$file] != $md5){
print '修改:'.$file."<br />";
unset($log[$file])
}else{
unset($log[$file]);
}
}
}
}
if(count($log)>0){
foreach($log as $file => $md5){
print "删除:".$file."<br />";
}
}
?>