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 />";

}

}

?>