Esempio n. 1
0
 function BaseDump($arc_name = "", $tbl_num, $start_row, &$TotalTables = 0)
 {
     global $DB;
     $ret = array();
     $last_row = $start_row;
     $mem = 32;
     // Minimum required value
     $sql = "SHOW TABLES;";
     $res = $DB->Query($sql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $ptab = array();
     while ($row = $res->Fetch()) {
         $ar = each($row);
         $table = $ar[1];
         $ptab[] = $table;
     }
     if (!($f = fopen($arc_name, "a"))) {
         RaiseErrorAndDie('Can\'t open file: ' . $arc_name);
     }
     $i = $tbl_num;
     $dump = "";
     $TotalTables = count($ptab);
     while ($i <= $TotalTables - 1 && haveTime()) {
         if (!strlen($ptab[$i])) {
             continue;
         }
         if ($last_row == -1) {
             $table = $ptab[$i];
             $drop = !IntOption('dump_base_skip_stat') || !preg_match("#^b_stat#i", $table);
             // если не переносим статистику, то не удаляем старую статистику при восстановлении
             if ($dump = CBackup::createTable($ptab[$i], $drop)) {
                 fwrite($f, $dump . "\n");
             } else {
                 $row_next = -1;
             }
             $next = false;
             $ret["num"] = $i;
             $ret["st_row"] = 0;
             $last_row = 0;
         }
         if ($dump) {
             $res = $DB->Query("SELECT count(*) as count FROM `{$ptab[$i]}`");
             $row_count = $res->Fetch();
             if ($row_count["count"] > 0) {
                 if ($ptab[$i] == 'b_xml_tree') {
                     $row_next = -1;
                 } elseif (IntOption('dump_base_skip_stat') && preg_match('#^b_stat#i', $ptab[$i])) {
                     $row_next = -1;
                 } elseif (IntOption('dump_base_skip_search') && preg_match("#^(b_search_content_site|b_search_content_group|b_search_content_stem|b_search_content_title|b_search_tags|b_search_content_freq|b_search_content|b_search_suggest)\$#i", $ptab[$i])) {
                     $row_next = -1;
                 } elseif (IntOption('dump_base_skip_log') && $ptab[$i] == 'b_event_log') {
                     $row_next = -1;
                 } elseif (CTar::strpos($dump, 'DEFINER VIEW')) {
                     $row_next = -1;
                 } else {
                     $row_next = CBackup::getData($ptab[$i], $f, $row_count["count"], $last_row, $mem);
                 }
             } else {
                 $row_next = -1;
             }
         }
         if ($row_next > 0) {
             $last_row = $row_next;
             $ret["num"] = $i;
             $ret["st_row"] = $last_row;
         } else {
             $ret["num"] = ++$i;
             $ret["st_row"] = -1;
             $last_row = -1;
         }
     }
     fclose($f);
     if (!($i <= count($ptab) - 1)) {
         $ret["end"] = true;
     }
     return $ret;
 }
Esempio n. 2
0
	function Scan($dir)
	{
		$dir = str_replace('\\','/',$dir);

		if ($this->Skip($dir))
			return;

		$this->nextPath = $dir;

		if (is_dir($dir))
		{
		#############################
		# DIR
		#############################
			if (!$this->startPath) // если начальный путь найден или не задан
			{
				$r = $this->ProcessDirBefore($dir);
				if ($r === false)
					return false;
			}

			if (!($handle = opendir($dir)))
			{
				$this->err[] = 'Error opening dir: '.$dir;
				return false;
			}

			while (($item = readdir($handle)) !== false)
			{
				if ($item == '.' || $item == '..' || false !== CTar::strpos($item,'\\'))
					continue;

				$f = $dir."/".$item;
				$r = $this->Scan($f);
				if ($r === false || $r === 'BREAK')
				{
					closedir($handle);
					return $r;
				}
			}
			closedir($handle);

			if (!$this->startPath) // если начальный путь найден или не задан
			{
				if ($this->ProcessDirAfter($dir) === false)
					return false;
				$this->DirCount++;
			}
		}
		else 
		{
		#############################
		# FILE
		#############################
			$r = $this->ProcessFile($dir);
			if ($r === false)
				return false;
			elseif ($r === 'BREAK') // если файл обработан частично
				return $r;
			$this->FileCount++;
		}
		return true;
	}