Пример #1
0
/**
 * db backup into file $files_dir . "/db_backup"
 * @return boolean
 */
function dump_database()
{
    global $files_dir;
    $dir = $files_dir . "/db_backup";
    if (!file_exists($dir)) {
        mkdir($dir, 0700, true);
    }
    if (!is_writable($dir)) {
        addErrorMessage(t('permission.denied.write.dir', "<i>{$dir}</i>"));
    } else {
        if (!file_exists($dir . "/.htaccess")) {
            $handle = fopen($dir . "/.htaccess", 'w+');
            fwrite($handle, "Deny from all");
            fclose($handle);
        }
        $tables = array();
        $res = db_query('SHOW TABLES');
        foreach ($res as $row) {
            $table = "";
            foreach ($row as $key => $val) {
                $table = $val;
                break;
            }
            if (isCTDBTable($table)) {
                $tables[] = $table;
            }
        }
        $return = "";
        $dt = new DateTime();
        $filename = $dir . '/db-backup-' . $dt->format('YmdHi') . '-' . md5(implode(',', $tables)) . '.sql';
        $handle = fopen($filename, 'w+');
        foreach ($tables as $table) {
            $return .= 'DROP TABLE IF EXISTS ' . $table . ';';
            $row2 = db_query('SHOW CREATE TABLE ' . $table)->fetch();
            $row2 = (array) $row2;
            $return .= "\n" . $row2["Create Table"] . ";\n\n";
            $result = db_query('SELECT * FROM ' . $table);
            foreach ($result as $content) {
                $return .= 'INSERT INTO ' . $table . ' VALUES(';
                $arr = array();
                foreach ($content as $key => $val) {
                    if (!isset($val)) {
                        $val = "NULL";
                    } else {
                        $val = '"' . addslashes($val) . '"';
                    }
                    $arr[] = $val;
                }
                $return .= implode(",", $arr) . ");\n";
            }
            $return .= "\n\n\n";
            fwrite($handle, $return);
            $return = "";
        }
        // save file
        fclose($handle);
        $zip = new ZipArchive();
        if ($zip->open($dir . '/db-backup-' . $dt->format('YmdHi') . '.zip', ZIPARCHIVE::OVERWRITE) !== true) {
            return false;
        }
        $zip->addFile($filename);
        $zip->close();
        unlink($filename);
        // delete files older then 30 days
        if ($handle = opendir($dir)) {
            $now = new DateTime();
            while (false !== ($file = readdir($handle))) {
                if (preg_match('/\\.sql|zip$/i', $file)) {
                    $date = DateTime::createFromFormat('YmdHi', substr($file, 10, strpos($file, ".") - 10));
                    if ($date != null) {
                        $interval = $date->diff($now);
                        if ($interval->format('%a') > 30) {
                            unlink($dir . "/" . $file);
                        }
                    }
                }
            }
        }
    }
}
 public function getImportTables($params)
 {
     $this->checkPerm("edit masterdata");
     $db = db_query('show tables');
     $arr = array();
     foreach ($db as $table) {
         foreach ($table as $row) {
             if (!isCTDBTable($row)) {
                 $arr[$row] = array("id" => $row, "bezeichnung" => $row);
             }
         }
     }
     return $arr;
 }