plugin.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. !defined('IN_UC') && exit('Access Denied');
  3. class control extends pluginbase {
  4. var $md5data = array();
  5. function control() {
  6. $this->pluginbase();
  7. }
  8. function onindex() {
  9. if(!$ucfiles = @file(UC_ROOT.'./control/admin/ucfiles.md5')) {
  10. $this->message('file_check_failed');
  11. }
  12. $this->load('app');
  13. $applist = $_ENV['app']->get_apps();
  14. $this->view->assign('applist', $applist);
  15. $this->checkfiles('./', '\.php', 0, '\.php|\.xml');
  16. $this->checkfiles('control/', '\.php');
  17. $this->checkfiles('model/', '\.php');
  18. $this->checkfiles('lib/', '\.php');
  19. $this->checkfiles('view/', '\.php|\.htm');
  20. $this->checkfiles('js/', '\.js');
  21. foreach($ucfiles as $line) {
  22. $file = trim(substr($line, 34));
  23. $md5datanew[$file] = substr($line, 0, 32);
  24. if($md5datanew[$file] != $this->md5data[$file]) {
  25. $modifylist[$file] = $this->md5data[$file];
  26. }
  27. $md5datanew[$file] = $this->md5data[$file];
  28. }
  29. $weekbefore = $timestamp - 604800;
  30. $addlist = @array_diff_assoc($this->md5data, $md5datanew);
  31. $dellist = @array_diff_assoc($md5datanew, $this->md5data);
  32. $modifylist = @array_diff_assoc($modifylist, $dellist);
  33. $showlist = @array_merge($this->md5data, $md5datanew);
  34. $doubt = 0;
  35. $dirlist = $dirlog = array();
  36. foreach($showlist as $file => $md5) {
  37. $dir = dirname($file);
  38. if(@array_key_exists($file, $modifylist)) {
  39. $fileststus = 'modify';
  40. } elseif(@array_key_exists($file, $dellist)) {
  41. $fileststus = 'del';
  42. } elseif(@array_key_exists($file, $addlist)) {
  43. $fileststus = 'add';
  44. } else {
  45. $filemtime = @filemtime($file);
  46. if($filemtime > $weekbefore) {
  47. $fileststus = 'doubt';
  48. $doubt++;
  49. } else {
  50. $fileststus = '';
  51. }
  52. }
  53. if(file_exists($file)) {
  54. $filemtime = @filemtime($file);
  55. $fileststus && $dirlist[$fileststus][$dir][basename($file)] = array(number_format(filesize($file)).' Bytes', $this->date($filemtime));
  56. } else {
  57. $fileststus && $dirlist[$fileststus][$dir][basename($file)] = array('', '');
  58. }
  59. }
  60. $result = $resultjs = '';
  61. $dirnum = 0;
  62. foreach($dirlist as $status => $filelist) {
  63. $dirnum++;
  64. $result .= '<div id="status_'.$status.'" style="display:'.($status != 'modify' ? 'none' : '').'">';
  65. foreach($filelist as $dir => $files) {
  66. $result .= '<br /><br /><u><b><a>'.$dir.'</a></b></u><br />';
  67. foreach($files as $filename => $file) {
  68. $result .= '<div style="clear:both"><b style="float:left;width: 30%">'.$filename.'</b><div style="float:left;width: 20%">'.$file[0].'</div><div style="float:left;width: 20%">'.$file[1].'</div></div>';
  69. }
  70. }
  71. $result .= '<br /><br /></div>';
  72. $resultjs .= '$(\'status_'.$status.'\').style.display=\'none\';';
  73. }
  74. $modifiedfiles = count($modifylist);
  75. $deletedfiles = count($dellist);
  76. $unknownfiles = count($addlist);
  77. $result .= '<script>function showresult(o) {'.$resultjs.'$(\'status_\' + o).style.display=\'\';}</script>';
  78. $this->view->assign('result', $result);
  79. $this->view->assign('modifiedfiles', $modifiedfiles);
  80. $this->view->assign('deletedfiles', $deletedfiles);
  81. $this->view->assign('unknownfiles', $unknownfiles);
  82. $this->view->assign('doubt', $doubt);
  83. $this->view->display('plugin_filecheck');
  84. }
  85. function checkfiles($currentdir, $ext = '', $sub = 1, $skip = '') {
  86. $dir = @opendir(UC_ROOT.$currentdir);
  87. $exts = '/('.$ext.')$/i';
  88. $skips = explode(',', $skip);
  89. while($entry = @readdir($dir)) {
  90. $file = $currentdir.$entry;
  91. if($entry != '.' && $entry != '..' && (preg_match($exts, $entry) || $sub && is_dir($file)) && !in_array($entry, $skips)) {
  92. if($sub && is_dir($file)) {
  93. $this->checkfiles($file.'/', $ext, $sub, $skip);
  94. } else {
  95. $this->md5data[$file] = md5_file($file);
  96. }
  97. }
  98. }
  99. }
  100. }