*
* @package Magic3 Framework
* @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright Copyright 2006-2009 Magic3 Project.
+ * @copyright Copyright 2006-2013 Magic3 Project.
* @license http://www.gnu.org/copyleft/gpl.html GPL License
- * @version SVN: $Id: specificDb.php 1909 2009-05-21 03:14:52Z fishbone $
+ * @version SVN: $Id$
* @link http://www.magic3.org
*/
require_once(M3_SYSTEM_INCLUDE_PATH . '/db/baseDb.php');
class specificDb extends BaseDb
{
protected $_dbName; // DB名
+ const BACKUP_CMD = 'mysqldump'; // DBバックアップコマンド
/**
* コンストラクタ
}
return $ret;
}
+ /**
+ * データベースをバックアップ
+ *
+ * @param string $filename バックアップファイル名
+ * @return bool true=正常、false=異常
+ */
+ function backupDb($filename)
+ {
+ $ret = false;
+ $dbType = $this->getDbType();
+ switch ($dbType){
+ case M3_DB_TYPE_MYSQL: // MySQLの場合
+ $cmd = self::BACKUP_CMD . ' --opt -u' . $this->_connect_user . ' -p' . $this->_connect_password . ' ' . $this->_dbName . ' --single-transaction | zip > ' . $filename;
+ $ret = $this->_procExec($cmd);
+ if ($ret == 0){
+ $ret = true;
+ } else {
+ $ret = false;
+ }
+ break;
+ case M3_DB_TYPE_PGSQL: // PostgreSQLの場合
+
+ break;
+ }
+ return $ret;
+ }
+ /**
+ * シェルコマンドを実行
+ *
+ * @param string $command コマンド
+ * @param array $output 標準出力
+ * @param array $errorOutput 標準エラー出力
+ * @return int プロセス終了コード
+ */
+ protected function _procExec($command, &$output = null, &$errorOutput = null)
+ {
+ $retVal = -1; // 終了コード
+ $descriptorspec = array(
+ 0 => array("pipe", "r"), // stdin
+ 1 => array("pipe", "w"), // stdout
+ 2 => array("pipe", "w") // stderr
+ );
+
+ $process = proc_open($command, $descriptorspec, $pipes, null, null);
+
+ if (is_resource($process)){
+ fclose($pipes[0]);
+
+ $output = stream_get_contents($pipes[1]);
+ $errorOutput = stream_get_contents($pipes[2]);
+
+ fclose($pipes[1]);
+ fclose($pipes[2]);
+
+ $retVal = proc_close($process);
+ }
+ return $retVal;
+ }
}
?>
*
* @package Magic3 Framework
* @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright Copyright 2006-2009 Magic3 Project.
+ * @copyright Copyright 2006-2013 Magic3 Project.
* @license http://www.gnu.org/copyleft/gpl.html GPL License
- * @version SVN: $Id: dbManager.php 1909 2009-05-21 03:14:52Z fishbone $
+ * @version SVN: $Id$
* @link http://www.magic3.org
*/
require_once(M3_SYSTEM_INCLUDE_PATH . '/common/core.php');
if ($ret) $size = $row['size'];
return $size;
}
+ /**
+ * データベースをバックアップ
+ *
+ * @param string $filename バックアップファイル名
+ * @return bool true=正常、false=異常
+ */
+ function backupDb($filename)
+ {
+ $ret = $this->specificDb->backupDb($filename);
+ return $ret;
+ }
}
?>
if (!file_exists($backupDir)) @mkdir($backupDir, M3_SYSTEM_DIR_PERMISSION, true/*再帰的に作成*/);
if ($act == 'new'){
- // $backupFile = self::BACKUP_FILENAME_HEAD . '-`date +\%Y\%m\%d-\%H\%M\%S`.sql.gz';
- $backupFile = self::BACKUP_FILENAME_HEAD . date('Ymd-His') . '.sql.gz';
+ $backupFile = $backupDir . DIRECTORY_SEPARATOR . self::BACKUP_FILENAME_HEAD . date('Ymd-His') . '.sql.zip';
$this->gInstance->getDbManager()->backupDb($backupFile);
} if ($act == 'delete'){ // メニュー項目の削除
$listedItem = explode(',', $request->trimValueOf('filelist'));
while (($file = $dir->read()) !== false){
$filePath = $path . DIRECTORY_SEPARATOR . $file;
// カレントディレクトリかどうかチェック
- if ($file == '.' || $file == '..') continue;
+ if ($file == '.' || $file == '..' || !strStartsWith($file, self::BACKUP_FILENAME_HEAD)) continue;
$fileList[] = $file;
}
$dir->close();