/** * @see Form::save() */ public function save() { parent::save(); // build session data array $sessionData = array(); $sessionData['loopTimeLimit'] = $this->loopTimeLimit; $sessionData['isGzip'] = $this->isGzip; $sessionData['tableName'] = ''; $tablecount = 0; $rowCount = 0; $sessionData['offset'] = -1; // get all tables if ($this->exportAll) { $this->readLoggedTables(); $this->exportTables = $this->loggedTables; } // prepare session data $sessionData['limit'] = $this->limit; $sessionData['backupFile'] = FileUtil::getRealPath(WCF_DIR . 'acp/backup/' . $this->backupFileName); $sessionData['tables'] = $this->exportTables; // calculate total steps $tableCount = count($this->exportTables); $tables = DatabaseDumper::getTableStates($this->exportTables); $rowCount = 0; foreach ($tables as $table) { $rowCount += $table['Rows']; } $sessionData['tableCount'] = $tableCount; $sessionData['rowCount'] = $rowCount; $sessionData['count'] = $sessionData['remain'] = $tableCount + $rowCount; WCF::getSession()->register('databaseExportData', $sessionData); $this->saved(); WCF::getTPL()->assign(array('pageTitle' => WCF::getLanguage()->get('wcf.acp.db.export.pageHeadline'), 'url' => 'index.php?action=DatabaseExport&packageID=' . PACKAGE_ID . SID_ARG_2ND_NOT_ENCODED, 'progress' => 0)); WCF::getTPL()->display('worker'); exit; }
public function cronDbBackup() { require_once WCF_DIR . 'lib/system/database/DatabaseDumper.class.php'; $allTables = WCF::getDB()->getTableNames(); $tablesEx = DatabaseDumper::getTableStates($allTables); $rowCount = 0; $tables = array(); foreach ($tablesEx as $table) { $rowCount += $table['Rows']; $tables[] = $table['Name']; } // comment buffer $limit = $rowCount + 10000; $offset = -1; $backupFile = WCF_DIR . 'acp/backup/' . date('YmdHis') . '.sql.gz'; $file = new ZipFile($backupFile, 'wb'); $loopTimeLimit = 3600; $loopStart = time(); $tableName = ''; // write header info $head = "-- WoltLab Community Framework\n"; $head .= "-- database: " . WCF::getDB()->getDatabaseName() . "\n"; $head .= "-- generated at " . date('r') . "\n\n"; $head .= "-- DO NOT EDIT THIS FILE\n\n"; $head .= "-- WCF DATABASE CHARSET\n"; $head .= "SET NAMES " . WCF::getDB()->getCharset() . ";\n\n"; $file->write($head); @set_time_limit(3600); DatabaseDumper::export($file, $tables, $limit, $loopTimeLimit, $loopStart, 0, $tableName); }