/** * @param string $mode * * @return array|bool */ function dbcbackup_run($mode = 'auto') { if (defined('DBC_BACKUP_RETURN')) { return; } $cfg = get_option('dbcbackup_options'); if (!$cfg['active'] and $mode == 'auto') { return; } if (empty($cfg['export_dir'])) { return; } if ($mode == 'auto') { dbcbackup_locale(); } require_once 'functions.php'; //require_once ('inc/functions.php'); define('DBC_COMPRESSION', $cfg['compression']); define('DBC_GZIP_LVL', $cfg['gzip_lvl']); define('DBC_BACKUP_RETURN', true); $timenow = time(); $mtime = explode(' ', microtime()); $time_start = $mtime[1] + $mtime[0]; $key = substr(md5(md5(DB_NAME . '|' . microtime())), 0, 6); $date = date('m.d.y-H.i.s', $timenow); list($file, $fp) = dbcbackup_open($cfg['export_dir'] . '/Backup_' . $date . '_' . $key); if ($file) { $removed = dbcbackup_rotate($cfg, $timenow); @set_time_limit(0); $sql = mysql_query("SHOW TABLE STATUS FROM " . DB_NAME); dbcbackup_write($file, dbcbackup_header()); while ($row = mysql_fetch_array($sql)) { dbcbackup_structure($row['Name'], $file); dbcbackup_data($row['Name'], $file); } dbcbackup_close($file); $result = __('Successful', 'dbcbackup'); } else { $result = sprintf(__("Failed To Open: %s.", 'dbcbackup'), $fp); } $mtime = explode(' ', microtime()); $time_end = $mtime[1] + $mtime[0]; $time_total = $time_end - $time_start; $cfg['logs'][] = array('file' => $fp, 'size' => @filesize($fp), 'started' => $timenow, 'took' => $time_total, 'status' => $result, 'removed' => $removed); update_option('dbcbackup_options', $cfg); return $mode == 'auto' ? true : $cfg['logs']; }
function dbcbackup_data($table, $fp) { $is_safe_mode = ini_get('safe_mode') == '1' ? 1 : 0; if (!$is_safe_mode) { set_time_limit(600); } $res = ''; $res .= "\n"; $res .= "--\n"; $res .= "-- Dumping data for table " . dbcbackup_backquote($table) . "\n"; $res .= "--\n"; $res .= "\n"; dbcbackup_write($fp, $res); if ($sql = mysql_query("SELECT * FROM " . dbcbackup_backquote($table))) { list($numfields, $fields_meta) = dbcbackup_fields($sql); //$res = "LOCK TABLES ".dbcbackup_backquote($table)." WRITE;\n"; $res = ''; dbcbackup_write($fp, $res); $search = array("", "\n", "\r", ""); //\x08\\x09, not required | Taken from phpMyAdmin. $replace = array('\\0', '\\n', '\\r', '\\Z'); while ($row = mysql_fetch_array($sql)) { $res = "INSERT INTO " . dbcbackup_backquote($table) . " VALUES ("; $fieldcounter = -1; $firstfield = 1; while (++$fieldcounter < $numfields) { if (!$firstfield) { $res .= ', '; } else { $firstfield = 0; } if (!isset($row[$fieldcounter]) || is_null($row[$fieldcounter])) { $res .= 'NULL'; } elseif ($fields_meta[$fieldcounter]->numeric && $fields_meta[$fieldcounter]->type != 'timestamp' && !$fields_meta[$fieldcounter]->blob) { $res .= $row[$fieldcounter]; } elseif (stristr($field_flags[$j], 'BINARY') && isset($GLOBALS['hexforbinary']) && $fields_meta[$fieldcounter]->type != 'datetime' && $fields_meta[$fieldcounter]->type != 'date' && $fields_meta[$fieldcounter]->type != 'time' && $fields_meta[$fieldcounter]->type != 'timestamp') { // empty blobs need to be different, but '0' is also empty :-( if (empty($row[$fieldcounter]) && $row[$fieldcounter] != '0') { $res .= '\'\''; } else { $res .= '0x' . bin2hex($row[$fieldcounter]); } // something else -> treat as a string } else { $res .= "'" . str_replace($search, $replace, dbcbackup_addslashes($row["{$fieldcounter}"])) . "'"; } // end if } $res .= ");\n"; dbcbackup_write($fp, $res); } //$res = "UNLOCK TABLES;\n"; $res = ''; mysql_free_result($sql); $status = true; } else { $tmp = mysql_error(); $res .= "--" . $tmp; $status = false; } dbcbackup_write($fp, $res); return $status; }