/** * 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(); }