Blame view

backup/info.php 5.04 KB
42868d70   andryeyev   Создал GIT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
  <?php
  // Sypex Dumper Lite 2
  header("Content-Type: text/html; charset=utf-8");
  set_error_handler("sxd_error");
  if(!empty($_POST['ajax']['job']) && preg_match("/^[\w-]+$/", $_POST['ajax']['job'])){
  	$d = date("'Y.m.d H:i:s'");
  	if(!empty($_COOKIE['sxd'])) {
  		include('ses.php');
  		if(!empty($SES[$_COOKIE['sxd']])) {
  			$CFG = &$SES[$_COOKIE['sxd']]['cfg'];
  			include(load_lang($SES[$_COOKIE['sxd']]['lng']));
  		}
  	}
  	if(empty($LNG)) {
  		include('cfg.php');
  		include(load_lang($CFG['lang']));
  		if(!empty($CFG['auth'])) {echo "sxd.log.add({$d},[" . esc($LNG['stop_5']) . " (1)]);sxd.hideLoading();"; exit;}
  	} 
  	$job_name = $_POST['ajax']['job'];
  	$log_seek = !empty($_POST['ajax']['lseek']) ? (int) $_POST['ajax']['lseek'] : 0;
  	$job_file = "{$CFG['backup_path']}{$job_name}.job.php";
  	if (!file_exists($job_file)) exit;
  	include($job_file);
  	switch($_POST['ajax']['act']) {
  		case 'info':
  			if (!file_exists($JOB['file_rtl'])) exit;
  			$fh = fopen($JOB['file_rtl'], 'r+b');
  			$time = time();
  			$f = explode("\t", fgets($fh));
  			$pt = !empty($f[2]) ? round(100 * $f[10] / $f[2], 2) : 100;
  			$pc = !empty($f[8]) ? round(100 * $f[7] / $f[8], 2) : 100;
  			$lh = fopen($JOB['file_log'], 'rb');
  			fseek($lh, $log_seek);
  			$rawlog = fread($lh, 8192);
  			$log = '';
  			$old_time = '';
  			$logs = array();
  			if(!empty($rawlog)){
  				$temp = explode("\n", $rawlog);
  				foreach($temp AS $l){
  					if(empty($l)) continue;
  					$t = explode("\t", $l);
  					if($t[0] != $old_time){
  						if(!empty($logs)) $log .= "sxd.log.add('{$old_time}',[" . implode(',', $logs) . "]);";
  						$old_time = $t[0];
  						$logs = array();
  					}
  					$logs[] = esc($t[2]);	
  				}
  				if(!empty($logs)) $log .= "sxd.log.add('{$old_time}',[" . implode(',', $logs) . "]);";
  			}
  			$log_seek = ftell($lh);
  			echo $log . "sxd.job.log_seek = {$log_seek};";
  			// Читаем лог
  			if($f[4] == 'EOJ') {
  				$pt = $pc = 100; 
  				fclose($lh);
  				fclose($fh);
  				if (function_exists('usleep')) usleep(400000);
  				else sleep(1);
  				if($JOB['act'] == 'backup') $f[3] = filesize(file_exists($JOB['file_name']) ? $JOB['file_name'] : $JOB['file_tmp']);
  				// Обновляем список файлов
  				if($JOB['act'] == 'backup') print "sxd.actions.filelist(); z('btn_down').file = '{$JOB['file']}'; z('btn_down').style.display = '';";
  				echo "sxd.timer.set({$f[0]},{$f[1]},{$pt});sxd.progress.current.set({$pc}, 0, {$f[8]}, {$f[8]});sxd.progress.total.set({$pt},{$f[3]});";
  				echo "sxd.log.add({$d},['{$LNG['job_done']}', '{$LNG['js']['records']}: {$f[10]}', '{$LNG['file_size']}: ' + sxd.formatSize({$f[3]},2), '{$LNG['job_time']}: {$f[5]} {$LNG['seconds']}']);sxd.hideLoading();";
  				unlink($JOB['file_log']);
  				unlink($JOB['file_rtl']);
  				unlink($job_file);
  			}
  			else if($f[9] > 0){
  				echo "sxd.log.add({$d},[" . esc($LNG['stop_' . $f[9]]) . "]);" . (($f[9] == 3 || $f[9] == 4) ? 'sxd.resumeJob();' : 'sxd.hideLoading();');
  			}
  			else{
  				if($JOB['act'] == 'backup') $f[3] = filesize($JOB['file_tmp']);
  				if($f[4] != 'EK' && time() > $f[1] + 30) {
  					fopen($JOB['file_stp'],'w');
  					$f[9] = 0;
  					$f[1] = $time;
  					fwrite($fh, implode("\t", $f) . "\n");
  					echo "sxd.log.add({$d},[" . esc($LNG['job_freeze']) . "]);sxd.hideLoading();z('btn_resume').style.display = '';z('btn_pause').style.display = 'none';";
  				}
  				echo "sxd.timer.set({$f[0]},{$time},{$pt});sxd.progress.current.set({$pc},0,{$f[7]}, {$f[8]});sxd.progress.total.set({$pt},{$f[3]});";	
  			}
  		break;
  		case 'stop': 
  			$fs = fopen($JOB['file_stp'],'w');
  			fwrite($fs, 1);
  			echo "sxd.log.add({$d},[" . esc($LNG['stop_job']) . "]);";
  		break;
  		case 'pause': 
  			fopen($JOB['file_stp'],'w');
  			echo "sxd.log.add({$d},[" . esc($LNG['stop_job']) . "]);";
  		break;
  	}
  }
  else echo "sxd.hideLoading();";	
  
  function load_lang($lng_name = 'auto'){
  	if($lng_name == 'auto'){
  		include('lang/list.php');
  		$lng = 'en';
  		if(preg_match_all('/[a-z]{2}(-[a-z]{2})?/', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $m)) {
  			foreach($m[0] AS $l){
  				if(isset($langs[$l])){
  					$lng_name = $l;
  					break;
  				}
  			}
  		}
  	}
  	if(file_exists("lang/lng_{$lng_name}.php")) return "lang/lng_{$lng_name}.php";
  	else return "lang/lng_en.php";
  }
  function esc($str){
  	return "'" . mysql_escape_string($str). "'";
  }
  
  function sxd_error($errno, $errmsg, $filename, $linenum, $vars){
  	global $JOB;
  	if(strpos($errmsg, 'timezone settings')) return;
  	if(!empty($JOB['file_stp'])) fopen($JOB['file_stp'],'w');
  	$errortype = array(1 => 'Error', 2 => 'Warning', 4 => 'Parsing Error', 8 => 'Notice', 16 => 'Core Error', 32 => 'Core Warning', 64 => 'Compile Error', 
  					   128 => 'Compile Warning', 256 => 'User Error', 512 => 'User Warning', 1024 => 'User Notice');
  	$str = "{$errortype[$errno]}: {$errmsg} ({$filename}:{$linenum})";
  	//error_log("[info.php]\n{$str}\n", 3, "error.log"); 
      if($errno == 8 || $errno == 1024) {
      	echo "sxd.log.add('" . date("Y.m.d H:i:s") . "',['" . mysql_escape_string($str) . "'], 4);sxd.hideLoading();";;
  	}
      elseif($errno < 1024) {
      	echo "sxd.log.add('" . date("Y.m.d H:i:s") . "',['" . mysql_escape_string($str) . "'], 4);sxd.hideLoading();";
      	die;
  	}
  } 
  
  ?>