示例#1
0
 /**
  * データベースを復元する
  * 既にあるテーブルは上書きしない
  * @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);
}