Ignore:
Timestamp:
2012/02/19 13:53:22 (12 years ago)
Author:
Seasoft
Message:

#1621 (バックアップの大規模店舗対応)

  • パスの誤りを修正
  • エラー対応
  • デバッグコードを削除
  • アプリケーションログに進捗(対象テーブル・全体終了)を記録

#1653 (システム設定>バックアップ管理 バックアップファイルに存在するテーブルのみ削除する)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php

    r21527 r21540  
    420420     */ 
    421421    function lfRestore($bkup_name, $bkup_dir, $bkup_ext, $mode) { 
     422        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     423 
    422424        // 実行時間を制限しない 
     425        // FIXME ファイル展開時に限定すべき 
    423426        set_time_limit(0); 
    424427 
    425         $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    426         $success = true; 
    427  
     428        $bkup_filepath = $bkup_dir . $bkup_name . $bkup_ext; 
    428429        $work_dir = $bkup_dir . $bkup_name . '/'; 
    429430 
    430431        //圧縮フラグTRUEはgzip解凍をおこなう 
    431         $tar = new Archive_Tar($work_dir . $bkup_name . $bkup_ext, TRUE); 
     432        $tar = new Archive_Tar($bkup_filepath, TRUE); 
    432433 
    433434        //指定されたフォルダ内に解凍する 
    434         $success = $tar->extract($work_dir . $bkup_name); 
    435  
    436         // 無事解凍できれば、リストアを行う 
     435        $success = $tar->extract($work_dir); 
     436 
     437        if (!$success) { 
     438            $msg = 'バックアップファイルの展開に失敗しました。' . "\n"; 
     439            $msg .= '展開元: ' . $bkup_filepath . "\n"; 
     440            $msg .= '展開先: ' . $work_dir; 
     441            SC_Utils_Ex::sfDispException($msg); 
     442        } 
     443 
     444        // トランザクション開始 
     445        $objQuery->begin(); 
     446 
     447        // INSERT実行 
     448        $success = $this->lfExeInsertSQL($objQuery, $work_dir, $mode); 
     449 
     450        // 自動採番の値をセット 
     451        if ($success) $this->lfSetAutoInc($objQuery, $work_dir . 'autoinc_data.csv'); 
     452 
     453        // リストア成功ならコミット失敗ならロールバック 
    437454        if ($success) { 
    438  
    439             // トランザクション開始 
    440             $objQuery->begin(); 
    441  
    442             // DBをクリア 
    443             $success = $this->lfDeleteAll($objQuery); 
    444  
    445             // INSERT実行 
    446             if ($success) $success = $this->lfExeInsertSQL($objQuery, $work_dir, $mode); 
    447  
    448             // 自動採番の値をセット 
    449             if ($success) $this->lfSetAutoInc($objQuery, $work_dir . 'autoinc_data.csv'); 
    450  
    451             // リストア成功ならコミット失敗ならロールバック 
    452             if ($success) { 
    453                 $objQuery->commit(); 
    454                 $this->restore_msg = 'リストア終了しました。'; 
    455                 $this->restore_err = true; 
    456             } else { 
    457                 $objQuery->rollback(); 
    458                 $this->restore_msg = 'リストアに失敗しました。'; 
    459                 $this->restore_name = $bkup_name; 
    460                 $this->restore_err = false; 
    461             } 
    462         } 
     455            $objQuery->commit(); 
     456            $this->restore_msg = 'リストア終了しました。'; 
     457            $this->restore_err = true; 
     458        } else { 
     459            $objQuery->rollback(); 
     460            $this->restore_msg = 'リストアに失敗しました。'; 
     461            $this->restore_name = $bkup_name; 
     462            $this->restore_err = false; 
     463        } 
     464        GC_Utils_Ex::gfPrintLog($this->restore_msg); 
    463465 
    464466        // FIXME この辺りで、バックアップ時と同等の一時ファイルの削除を実行すべきでは? 
     
    488490                continue; 
    489491            } 
    490             var_dump($matches); 
    491492            $file_path = $dir . $file_name; 
    492493            $table = $matches[1]; 
     
    506507            } 
    507508 
     509            GC_Utils_Ex::gfPrintLog('リストア実行: ' . $table); 
     510            $objQuery->delete($table); 
     511 
    508512            $line = 0; 
     513            $arrColName = array(); 
    509514            while (!feof($fp)) { 
    510515                $line++; 
     
    517522                } 
    518523 
     524                // 空行を無視 
     525                // false との比較は PHP 5.2.x Windows バグ対応 
     526                // 参考: http://www.php.net/manual/ja/function.fgetcsv.php#98502 
     527                if ($arrCsvLine === array(null) || $arrCsvLine === false) { 
     528                    continue; 
     529                } 
     530 
    519531                $arrVal = array_combine($arrColName, $arrCsvLine); 
    520532                $objQuery->insert($table, $arrVal); 
     
    541553    } 
    542554 
    543     // DBを全てクリアする 
    544     function lfDeleteAll(&$objQuery) { 
    545         $ret = true; 
    546  
    547         $arrTableList = $objQuery->listTables(); 
    548  
    549         foreach ($arrTableList as $val) { 
    550             // バックアップテーブルは削除しない 
    551             // XXX mtb_zip も削除不要では? 
    552             if ($val != 'dtb_bkup') { 
    553                 $ret = $objQuery->delete($val); 
    554                 if (PEAR::isError($ret)) return false; 
    555             } 
    556         } 
    557         return true; 
    558     } 
    559  
    560555    // 選択したバックアップをDBから削除 
    561556    function lfDeleteBackUp(&$arrForm, $bkup_dir, $bkup_ext) { 
Note: See TracChangeset for help on using the changeset viewer.