optimizer_dbbackup_clean.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: optimizer_dbbackup_clean.php 31344 2012-08-15 04:01:32Z zhangjie $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class optimizer_dbbackup_clean {
  12. public function __construct() {
  13. }
  14. public function check() {
  15. global $_G;
  16. $exportlog = $exportsize = $exportziplog = array();
  17. $filecount = 0;
  18. $this->check_exportfile($exportlog, $exportziplog, $exportsize, $filecount);
  19. if(!$filecount) {
  20. $return = array('status' => 0, 'type' => 'none', 'lang' => lang('optimizer', 'optimizer_dbbackup_clean_safe'));
  21. } else {
  22. $return = array('status' => 1, 'type' => 'notice', 'lang' => lang('optimizer', 'optimizer_dbbackup_clean_delete', array('filecount' => $filecount)));
  23. }
  24. return $return;
  25. }
  26. function get_backup_dir() {
  27. $backupdirs = array();
  28. $dir = dir(DISCUZ_ROOT.'./data');
  29. while(($file = $dir->read()) !== FALSE) {
  30. if(filetype(DISCUZ_ROOT.'./data/'.$file) == 'dir' && preg_match('/^backup_\w+/', $file)) {
  31. $backupdirs[] = $file;
  32. }
  33. }
  34. $dir->close();
  35. return $backupdirs;
  36. }
  37. function check_exportfile(&$exportlog, &$exportziplog, &$exportsize, &$filecount) {
  38. $backupdirs = $this->get_backup_dir();
  39. if(empty($backupdirs)) {
  40. return;
  41. }
  42. $filecount = 0;
  43. foreach($backupdirs as $backupdir) {
  44. $dir = dir(DISCUZ_ROOT.'./data/'.$backupdir);
  45. while($entry = $dir->read()) {
  46. $entry = './data/'.$backupdir.'/'.$entry;
  47. if(is_file($entry)) {
  48. if(preg_match("/\.sql$/i", $entry)) {
  49. $filesize = filesize($entry);
  50. $fp = fopen($entry, 'rb');
  51. $identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", fgets($fp, 256))));
  52. fclose($fp);
  53. $key = preg_replace('/^(.+?)(\-\d+)\.sql$/i', '\\1', basename($entry));
  54. $exportlog[$key][$identify[4]] = array(
  55. 'version' => $identify[1],
  56. 'type' => $identify[2],
  57. 'method' => $identify[3],
  58. 'volume' => $identify[4],
  59. 'tablepre' => $identify[5],
  60. 'dbcharset' => $identify[6],
  61. 'filename' => $entry,
  62. 'dateline' => filemtime($entry),
  63. 'size' => $filesize
  64. );
  65. $filecount++;
  66. $exportsize[$key] += $filesize;
  67. } elseif(preg_match("/\.zip$/i", $entry)) {
  68. $key = preg_replace('/^(.+?)(\-\d+)\.zip$/i', '\\1', basename($entry));
  69. $filesize = filesize($entry);
  70. $exportziplog[$key][] = array(
  71. 'type' => 'zip',
  72. 'filename' => $entry,
  73. 'size' => filesize($entry),
  74. 'dateline' => filemtime($entry)
  75. );
  76. $filecount++;
  77. }
  78. }
  79. }
  80. $dir->close();
  81. }
  82. }
  83. }
  84. ?>