/**
  * CSV作成 テンポラリファイル出力 コールバック関数
  *
  * @param mixed $data 出力データ
  * @return boolean true (true:固定 false:中断)
  */
 function cbOutputCSV($data)
 {
     $line = '';
     if ($this->first_line) {
         // カラム名
         $line .= SC_Helper_CSV_Ex::sfArrayToCsv(array_keys($data)) . "\n";
         $this->first_line = false;
     }
     $line .= SC_Helper_CSV_Ex::sfArrayToCsv($data);
     $line .= "\n";
     SC_Utils_Ex::extendTimeOut();
     return fwrite($this->fpOutput, $line);
 }
 /**
  * バックアップファイル作成.
  *
  * TODO $csv_data はデータを大きく保持しすぎに感じる。分割して書き込みたい。
  * @param string $bkup_name
  * @return array $arrErr
  */
 function lfCreateBkupData($bkup_name, $bkup_dir)
 {
     // 実行時間を制限しない
     set_time_limit(0);
     $objQuery =& SC_Query_Ex::getSingletonInstance();
     $csv_data = '';
     $csv_autoinc = "";
     $arrData = array();
     $success = true;
     if (!is_dir(dirname($bkup_dir))) {
         $success = mkdir(dirname($bkup_dir));
     }
     $bkup_dir = $bkup_dir . $bkup_name . "/";
     // 全テーブル取得
     $arrTableList = $objQuery->listTables();
     // 各テーブル情報を取得する
     foreach ($arrTableList as $table) {
         if (!($table == "dtb_bkup" || $table == "mtb_zip")) {
             // 全データを取得
             if ($table == "dtb_pagelayout") {
                 $arrData = $objQuery->getAll("SELECT * FROM {$table} ORDER BY page_id");
             } else {
                 $arrData = $objQuery->getAll("SELECT * FROM {$table}");
             }
             // CSVデータ生成
             if (count($arrData) > 0) {
                 // テーブル名
                 $csv_data .= $table . "\r\n";
                 // カラム名
                 $csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv(array_keys($arrData[0])) . "\r\n";
                 // データ
                 foreach ($arrData as $data_val) {
                     $csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv($data_val) . "\r\n";
                 }
                 // テーブル終端
                 $csv_data .= "\r\n";
             }
             // タイムアウトを防ぐ
             SC_Utils_Ex::sfFlush();
         }
     }
     // 自動採番型の構成を取得する
     $csv_autoinc = $this->lfGetAutoIncrement();
     $csv_file = $bkup_dir . "bkup_data.csv";
     $csv_autoinc_file = $bkup_dir . "autoinc_data.csv";
     mb_internal_encoding(CHAR_CODE);
     // CSV出力
     // ディレクトリが存在していなければ作成する
     if (!is_dir(dirname($csv_file))) {
         $success = mkdir(dirname($csv_file));
     }
     if ($success) {
         // dataをCSV出力
         $fp = fopen($csv_file, 'w');
         if ($fp) {
             if ($csv_data != "") {
                 $success = fwrite($fp, $csv_data);
             }
             fclose($fp);
         }
         // 自動採番をCSV出力
         $fp = fopen($csv_autoinc_file, 'w');
         if ($fp) {
             if ($csv_autoinc != "") {
                 $success = fwrite($fp, $csv_autoinc);
             }
             fclose($fp);
         }
     }
     if ($success) {
         //圧縮フラグTRUEはgzip圧縮をおこなう
         $tar = new Archive_Tar($this->bkup_dir . $bkup_name . $this->bkup_ext, TRUE);
         //bkupフォルダに移動する
         chdir($this->bkup_dir);
         //圧縮をおこなう
         $zip = $tar->create("./" . $bkup_name . "/");
         // バックアップデータの削除
         if ($zip) {
             SC_Utils_Ex::sfDelFile($bkup_dir);
         }
     }
     if (!$success) {
         $arrErr['bkup_name'] = "バックアップに失敗しました。";
         // バックアップデータの削除
         SC_Utils_Ex::sfDelFile($bkup_dir);
     }
     return isset($arrErr) ? $arrErr : array();
 }