/** * データベースを復元する * 既にあるテーブルは上書きしない * @param array $config * @param string $source */ function restoreDb($config, $source) { App::import('Vendor', 'DbRestore', array('file' => 'dbrestore.php')); $dbType = preg_replace('/_ex$/i', '', $config['driver']); switch ($dbType) { case 'mysql': $connection = @mysql_connect($config['host'], $config['login'], $config['password']); $sql = "SET NAMES " . Configure::read('internalEncodingByMySql'); mysql_query($sql); $dbRestore = new DbRestore('mysql'); $dbRestore->connect($config['database'], $config['host'], $config['login'], $config['password'], $config['port']); return $dbRestore->doRestore($source); break; case 'postgres': $dbRestore = new DbRestore('postgres'); $dbRestore->connect($config['database'], $config['host'], $config['login'], $config['password'], $config['port']); return $dbRestore->doRestore($source); break; case 'sqlite': case 'sqlite3': if ($config['driver'] == 'sqlite3_ex') { $driver = 'sqlite3'; } else { $driver = $config['driver']; } $dbRestore = new DbRestore($driver); $dbRestore->connect($config['database']); return $dbRestore->doRestore($source); break; case 'csv': $targetDir = APP . 'db' . DS . 'csv' . DS . 'baser' . DS; $folder = new Folder($source); $files = $folder->read(true, true); $ret = true; foreach ($files[1] as $file) { if ($file != 'empty' && $ret) { if (!file_exists($targetDir . $config['prefix'] . $file)) { $_ret = copy($source . $file, $targetDir . $config['prefix'] . $file); if ($_ret) { chmod($targetDir . $config['prefix'] . $file, 0666); } else { $ret = $_ret; } } } } return $ret; break; } }
function initDbDump() { static $done = false; if ($done) { throw new Exception("init already done"); } if (file_exists('unit/dbRestore.php')) { include_once 'unit/dbRestore.php'; } else { include_once 'dbRestore.php'; } $iTime = microtime(true); $dbM = new DbRestore(); $dbM->dumpDB(); $done = true; return sprintf("%.2f", microtime(true) - $iTime); }