/** * テンプレートパッケージの削除. * * @param string $template_code テンプレートコード * @param integer $device_type_id 端末種別ID * @return boolean 成功した場合 true; 失敗した場合 false */ function doDelete($template_code, $device_type_id) { if ($template_code == $this->getTemplateName($device_type_id) || $template_code == $this->getTemplateName($device_type_id, true)) { $this->arrErr['err'] = "※ デフォルトテンプレートと、選択中のテンプレートは削除出来ません<br />"; return false; } else { $objQuery =& SC_Query_Ex::getSingletonInstance(); $objQuery->begin(); $objQuery->delete('dtb_templates', 'template_code = ? AND device_type_id = ?', array($template_code, $device_type_id)); $error = "※ テンプレートの削除ができませんでした<br />"; // テンプレート削除 $templates_dir = SMARTY_TEMPLATES_REALDIR . $template_code . "/"; if (SC_Utils_Ex::sfDelFile($templates_dir) === false) { $this->arrErr['err'] = $error; $objQuery->rollback(); return false; } // ユーザーデータ削除 $user_dir = USER_TEMPLATE_REALDIR . $template_code . "/"; if (SC_Utils_Ex::sfDelFile($user_dir) === false) { $this->arrErr['err'] = $error; $objQuery->rollback(); return false; } // コンパイル削除 $templates_c_dir = DATA_REALDIR . "Smarty/templates_c/" . $template_code . "/"; if (SC_Utils_Ex::sfDelFile($templates_c_dir) === false) { $this->arrErr['err'] = $error; $objQuery->rollback(); return false; } $objQuery->commit(); return true; } }
function sfDelFile($dir) { if (file_exists($dir)) { $dh = opendir($dir); // フォルダ内のファイルを削除 while ($file = readdir($dh)) { if ($file == "." or $file == "..") { continue; } $del_file = $dir . "/" . $file; if (is_file($del_file)) { $ret = unlink($dir . "/" . $file); } else { if (is_dir($del_file)) { $ret = SC_Utils_Ex::sfDelFile($del_file); } } if (!$ret) { return $ret; } } // 閉じる closedir($dh); // フォルダを削除 return rmdir($dir); } }
/** * テンプレートパッケージの削除 */ function lfDeleteTemplate($template_code) { // DB更新 $objQuery = new SC_Query(); $objQuery->delete('dtb_templates', 'template_code = ?', array($template_code)); // テンプレート削除 $templates_dir = SMARTY_TEMPLATES_DIR . $template_code . "/"; SC_Utils_Ex::sfDelFile($templates_dir); // コンパイル削除 $templates_c_dir = DATA_PATH . "Smarty/templates_c/" . $template_code . "/"; SC_Utils_Ex::sfDelFile($templates_c_dir); // ユーザーデータ削除 $user_dir = USER_TEMPLATE_PATH . $template_code . "/"; SC_Utils_Ex::sfDelFile($user_dir); }
/** * バックアップファイル作成. * * 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(); }
/** * tarアーカイブを解凍する. * * @param string $path アーカイブパス * @return boolean Archive_Tar::extractModify()のエラー */ function unpackFile($path) { // 圧縮フラグTRUEはgzip解凍をおこなう $tar = new Archive_Tar($path, true); $dir = dirname($path); $file_name = basename($path); // 拡張子を切り取る $unpacking_name = preg_replace("/(\\.tar|\\.tar\\.gz)\$/", "", $file_name); // 指定されたフォルダ内に解凍する $result = $tar->extractModify($dir . "/", $unpacking_name); GC_Utils_Ex::gfPrintLog("解凍:" . $dir . "/" . $file_name . "->" . $dir . "/" . $unpacking_name); // フォルダ削除 SC_Utils_Ex::sfDelFile($dir . "/" . $unpacking_name); // 圧縮ファイル削除 unlink($path); return $result; }
function lfCreateBkupData($bkup_name) { $objQuery = new SC_Query(); $csv_data = ""; $csv_autoinc = ""; $err = true; $bkup_dir = $this->bkup_dir; if (!is_dir(dirname($bkup_dir))) { $err = mkdir(dirname($bkup_dir)); } $bkup_dir = $bkup_dir . $bkup_name . "/"; // 全テーブル取得 $arrTableList = $this->lfGetTableList(); // 各テーブル情報を取得する foreach ($arrTableList as $key => $val) { if (!($val == "dtb_bkup" || $val == "mtb_zip")) { // 自動採番型の構成を取得する $csv_autoinc .= $this->lfGetAutoIncrement($val); // 全データを取得 if ($val == "dtb_pagelayout") { $arrData = $objQuery->getAll("SELECT * FROM {$val} ORDER BY page_id"); } else { $arrData = $objQuery->getAll("SELECT * FROM {$val}"); } // CSVデータ生成 if (count($arrData) > 0) { // カラムをCSV形式に整える $arrKyes = SC_Utils_Ex::sfGetCommaList(array_keys($arrData[0]), false); // データをCSV形式に整える $data = ""; foreach ($arrData as $data_key => $data_val) { //$val = str_replace("\"", "\\\"", $val); $data .= $this->lfGetCSVList($arrData[$data_key]); } // CSV出力データ生成 $csv_data .= $val . "\r\n"; $csv_data .= $arrKyes . "\r\n"; $csv_data .= $data; $csv_data .= "\r\n"; } // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } } $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))) { $err = mkdir(dirname($csv_file)); } if ($err) { // dataをCSV出力 $fp = fopen($csv_file, "w"); if ($fp) { if ($csv_data != "") { $err = fwrite($fp, $csv_data); } fclose($fp); } // 自動採番をCSV出力 $fp = fopen($csv_autoinc_file, "w"); if ($fp) { if ($csv_autoinc != "") { $err = fwrite($fp, $csv_autoinc); } fclose($fp); } } // 各種ファイルコピー if ($err) { /** // 商品画像ファイルをコピー // ディレクトリが存在していなければ作成する $image_dir = $bkup_dir . "save_image/"; if (!is_dir(dirname($image_dir))) $err = mkdir(dirname($image_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../upload/save_image/",$image_dir, $copy_mess); // テンプレートファイルをコピー // ディレクトリが存在していなければ作成する $templates_dir = $bkup_dir . "templates/"; if (!is_dir(dirname($templates_dir))) $err = mkdir(dirname($templates_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/templates/",$templates_dir, $copy_mess); // インクルードファイルをコピー // ディレクトリが存在していなければ作成する $inc_dir = $bkup_dir . "include/"; if (!is_dir(dirname($inc_dir))) $err = mkdir(dirname($inc_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/include/",$inc_dir, $copy_mess); // CSSファイルをコピー // ディレクトリが存在していなければ作成する $css_dir = $bkup_dir . "css/"; if (!is_dir(dirname($css_dir))) $err = mkdir(dirname($css_dir)); $copy_mess = ""; $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/css/",$css_dir, $copy_mess); **/ //圧縮フラグTRUEはgzip圧縮をおこなう $tar = new Archive_Tar($this->bkup_dir . $bkup_name . ".tar.gz", TRUE); //bkupフォルダに移動する chdir($this->bkup_dir); //圧縮をおこなう $zip = $tar->create("./" . $bkup_name . "/"); // バックアップデータの削除 if ($zip) { SC_Utils_Ex::sfDelFile($bkup_dir); } } if (!$err) { $arrErr['bkup_name'] = "バックアップに失敗しました。"; // バックアップデータの削除 SC_Utils_Ex::sfDelFile($bkup_dir); } return isset($arrErr) ? $arrErr : array(); }