Source for file LC_Page_Admin_System_Bkup.php

Documentation is available at LC_Page_Admin_System_Bkup.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2007 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once(CLASS_PATH "pages/LC_Page.php");
  26. require_once(DATA_PATH"module/Tar.php");
  27. /**
  28.  * バックアップ のページクラス.
  29.  *
  30.  * @package Page
  31.  * @author LOCKON CO.,LTD.
  32.  * @version $Id: LC_Page_Admin_System_Bkup.php 17986 2009-04-22 12:28:27Z Seasoft $
  33.  */
  34.  
  35.     // }}}
  36.     // {{{ functions
  37.  
  38.     /**
  39.      * Page を初期化する.
  40.      *
  41.      * @return void 
  42.      */
  43.     function init({
  44.         parent::init();
  45.         $this->tpl_mainpage = 'system/bkup.tpl';
  46.         $this->tpl_subnavi 'system/subnavi.tpl';
  47.         $this->tpl_mainno = 'system';
  48.         $this->tpl_subno 'bkup';
  49.         $this->tpl_subtitle 'バックアップ管理';
  50.  
  51.         $this->bkup_dir DATA_PATH "downloads/backup/";
  52.         $this->bkup_ext '.tar.gz';
  53.  
  54.     }
  55.  
  56.     /**
  57.      * Page のプロセス.
  58.      *
  59.      * @return void 
  60.      */
  61.     function process({
  62.         $objView new SC_AdminView();
  63.         $objQuery new SC_Query();
  64.  
  65.         // セッションクラス
  66.         $objSess new SC_Session();
  67.         // 認証可否の判定
  68.         SC_Utils_Ex::sfIsSuccess($objSess);
  69.  
  70.         // バックアップテーブルがなければ作成する
  71.         $this->lfCreateBkupTable();
  72.  
  73.         if (!isset($_POST['mode'])) $_POST['mode'"";
  74.  
  75.         switch($_POST['mode']{
  76.             // バックアップを作成する
  77.         case 'bkup':
  78.             // 入力文字列の変換
  79.             $arrData $this->lfConvertParam($_POST);
  80.  
  81.             // エラーチェック
  82.             $arrErr $this->lfCheckError($arrData);
  83.  
  84.             // エラーがなければバックアップ処理を行う
  85.             if (count($arrErr<= 0{
  86.                 // バックアップファイル作成
  87.                 $arrErr $this->lfCreateBkupData($arrData['bkup_name']);
  88.  
  89.                 // DBにデータ更新
  90.                 if (count($arrErr<= 0{
  91.                     $this->lfUpdBkupData($arrData);
  92.                 }else{
  93.                     $arrForm $arrData;
  94.                 }
  95.  
  96.                 $this->tpl_onload = "alert('バックアップ完了しました');";
  97.             }else{
  98.                 $arrForm $arrData;
  99.             }
  100.  
  101.             break;
  102.  
  103.             // リストア
  104.         case 'restore':
  105.         case 'restore_config':
  106.             if ($_POST['mode'== 'restore_config'{
  107.                 $this->mode "restore_config";
  108.             }
  109.  
  110.             $this->lfRestore($_POST['list_name']);
  111.  
  112.             break;
  113.  
  114.             // 削除
  115.         case 'delete':
  116.             $del_file $this->bkup_dir.$_POST['list_name'$this->bkup_ext;
  117.             // ファイルの削除
  118.             if(is_file($del_file)){
  119.                 $ret unlink($del_file);
  120.             }
  121.  
  122.             // DBから削除
  123.             $delsql "DELETE FROM dtb_bkup WHERE bkup_name = ?";
  124.             $objQuery->query($delsqlarray($_POST['list_name']));
  125.  
  126.             break;
  127.  
  128.             // ダウンロード
  129.         case 'download' :
  130.             $filename $_POST['list_name'$this->bkup_ext;
  131.             $dl_file $this->bkup_dir.$_POST['list_name'$this->bkup_ext;
  132.  
  133.             // ダウンロード開始
  134.             Header("Content-disposition: attachment; filename=${filename}");
  135.             Header("Content-type: application/octet-stream; name=${filename}");
  136.             header("Content-Length: " .filesize($dl_file));
  137.             readfile ($dl_file);
  138.             exit();
  139.             break;
  140.  
  141.         default:
  142.             break;
  143.         }
  144.  
  145.         // バックアップリストを取得する
  146.         $arrBkupList $this->lfGetBkupData("ORDER BY create_date DESC");
  147.         // テンプレートファイルに渡すデータをセット
  148.         $this->arrErr = isset($arrErr$arrErr "";
  149.         $this->arrForm = isset($arrForm$arrForm "";
  150.         $this->arrBkupList $arrBkupList;
  151.  
  152.         $objView->assignobj($this);        //変数をテンプレートにアサインする
  153.         $objView->display(MAIN_FRAME);        //テンプレートの出力
  154.     }
  155.  
  156.     /**
  157.      * デストラクタ.
  158.      *
  159.      * @return void 
  160.      */
  161.     function destroy({
  162.         parent::destroy();
  163.     }
  164.  
  165.     /* 取得文字列の変換 */
  166.     function lfConvertParam($array{
  167.         /*
  168.          *    文字列の変換
  169.          *    K :  「半角(ハンカク)片仮名」を「全角片仮名」に変換
  170.          *    C :  「全角ひら仮名」を「全角かた仮名」に変換
  171.          *    V :  濁点付きの文字を一文字に変換。"K","H"と共に使用します
  172.          *    n :  「全角」数字を「半角(ハンカク)」に変換
  173.          *  a :  全角英数字を半角英数字に変換する
  174.          */
  175.         $arrConvList['bkup_name'"a";
  176.         $arrConvList['bkup_memo'"KVa";
  177.  
  178.         // 文字変換
  179.         foreach ($arrConvList as $key => $val{
  180.             // POSTされてきた値のみ変換する。
  181.             if(isset($array[$key])) {
  182.                 $array[$keymb_convert_kana($array[$key,$val);
  183.             }
  184.         }
  185.         return $array;
  186.     }
  187.  
  188.     // エラーチェック
  189.     function lfCheckError($array){
  190.         $objErr new SC_CheckError($array);
  191.  
  192.         $objErr->doFunc(array("バックアップ名""bkup_name"STEXT_LEN)array("EXIST_CHECK","MAX_LENGTH_CHECK","NO_SPTAB","ALNUM_CHECK"));
  193.         $objErr->doFunc(array("バックアップメモ""bkup_memo"MTEXT_LEN)array("MAX_LENGTH_CHECK"));
  194.  
  195.         // 重複チェック
  196.         $ret $this->lfGetBkupData("WHERE bkup_name = ?"array($array['bkup_name']));
  197.         if (count($ret0{
  198.             $objErr->arrErr['bkup_name'"バックアップ名が重複しています。別名を入力してください。";
  199.         }
  200.  
  201.         return $objErr->arrErr;
  202.     }
  203.  
  204.     // バックアップファイル作成
  205.     function lfCreateBkupData($bkup_name){
  206.         // 実行時間を制限しない
  207.         set_time_limit(0);
  208.         
  209.         $objQuery new SC_Query();
  210.         $csv_data "";
  211.         $csv_autoinc "";
  212.         $err true;
  213.  
  214.         $bkup_dir $this->bkup_dir;
  215.         if (!is_dir(dirname($bkup_dir))) $err mkdir(dirname($bkup_dir));
  216.         $bkup_dir $bkup_dir $bkup_name "/";
  217.  
  218.         // 全テーブル取得
  219.         $arrTableList $this->lfGetTableList();
  220.  
  221.         // 各テーブル情報を取得する
  222.         foreach($arrTableList as $key => $val){
  223.  
  224.             if (!($val == "dtb_bkup" || $val == "mtb_zip")) {
  225.  
  226.                 // 自動採番型の構成を取得する
  227.                 $csv_autoinc .= $this->lfGetAutoIncrement($val);
  228.  
  229.                 // 全データを取得
  230.                 if ($val == "dtb_pagelayout"){
  231.                     $arrData $objQuery->getAll("SELECT * FROM $val ORDER BY page_id");
  232.                 }else{
  233.                     $arrData $objQuery->getAll("SELECT * FROM $val");
  234.                 }
  235.  
  236.                 // CSVデータ生成
  237.                 if (count($arrData0{
  238.  
  239.                     // カラムをCSV形式に整える
  240.                     $arrKyes SC_Utils_Ex::sfGetCommaList(array_keys($arrData[0])false);
  241.  
  242.                     // データをCSV形式に整える
  243.                     $data "";
  244.                     foreach($arrData as $data_key => $data_val){
  245.                         //$val = str_replace("\"", "\\\"", $val);
  246.                         $data .= $this->lfGetCSVList($arrData[$data_key]);
  247.  
  248.                     }
  249.                     // CSV出力データ生成
  250.                     $csv_data .= $val "\r\n";
  251.                     $csv_data .= $arrKyes "\r\n";
  252.                     $csv_data .= $data;
  253.                     $csv_data .= "\r\n";
  254.                 }
  255.  
  256.                 // タイムアウトを防ぐ
  257.                 SC_Utils_Ex::sfFlush();
  258.             }
  259.         }
  260.  
  261.         $csv_file $bkup_dir "bkup_data.csv";
  262.         $csv_autoinc_file $bkup_dir "autoinc_data.csv";
  263.         mb_internal_encoding(CHAR_CODE);
  264.         // CSV出力
  265.         // ディレクトリが存在していなければ作成する
  266.         if (!is_dir(dirname($csv_file))) {
  267.             $err mkdir(dirname($csv_file));
  268.         }
  269.         if ($err{
  270.             // dataをCSV出力
  271.             $fp fopen($csv_file,"w");
  272.             if($fp{
  273.                 if($csv_data != ""){
  274.                     $err fwrite($fp$csv_data);
  275.                 }
  276.                 fclose($fp);
  277.             }
  278.  
  279.             // 自動採番をCSV出力
  280.             $fp fopen($csv_autoinc_file,"w");
  281.             if($fp{
  282.                 if($csv_autoinc != ""){
  283.                     $err fwrite($fp$csv_autoinc);
  284.                 }
  285.                 fclose($fp);
  286.             }
  287.         }
  288.  
  289.         // 各種ファイルコピー
  290.         if ($err{
  291.             /**
  292.             // 商品画像ファイルをコピー
  293.             // ディレクトリが存在していなければ作成する
  294.             $image_dir = $bkup_dir . "save_image/";
  295.             if (!is_dir(dirname($image_dir))) $err = mkdir(dirname($image_dir));
  296.             $copy_mess = "";
  297.             $copy_mess = SC_Utils_Ex::sfCopyDir("../../upload/save_image/",$image_dir, $copy_mess);
  298.  
  299.             // テンプレートファイルをコピー
  300.             // ディレクトリが存在していなければ作成する
  301.             $templates_dir = $bkup_dir . "templates/";
  302.             if (!is_dir(dirname($templates_dir))) $err = mkdir(dirname($templates_dir));
  303.             $copy_mess = "";
  304.             $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/templates/",$templates_dir, $copy_mess);
  305.  
  306.             // インクルードファイルをコピー
  307.             // ディレクトリが存在していなければ作成する
  308.             $inc_dir = $bkup_dir . "include/";
  309.             if (!is_dir(dirname($inc_dir))) $err = mkdir(dirname($inc_dir));
  310.             $copy_mess = "";
  311.             $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/include/",$inc_dir, $copy_mess);
  312.  
  313.             // CSSファイルをコピー
  314.             // ディレクトリが存在していなければ作成する
  315.             $css_dir = $bkup_dir . "css/";
  316.             if (!is_dir(dirname($css_dir))) $err = mkdir(dirname($css_dir));
  317.             $copy_mess = "";
  318.             $copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/css/",$css_dir, $copy_mess);
  319.             **/
  320.             //圧縮フラグTRUEはgzip圧縮をおこなう
  321.             $tar new Archive_Tar($this->bkup_dir $bkup_name $this->bkup_extTRUE);
  322.  
  323.             //bkupフォルダに移動する
  324.             chdir($this->bkup_dir);
  325.  
  326.             //圧縮をおこなう
  327.             $zip $tar->create("./" $bkup_name "/");
  328.  
  329.             // バックアップデータの削除
  330.             if ($zipSC_Utils_Ex::sfDelFile($bkup_dir);
  331.         }
  332.  
  333.         if (!$err{
  334.             $arrErr['bkup_name'"バックアップに失敗しました。";
  335.             // バックアップデータの削除
  336.             SC_Utils_Ex::sfDelFile($bkup_dir);
  337.         }
  338.  
  339.         return isset($arrErr$arrErr array();
  340.     }
  341.  
  342.     /* 配列の要素をCSVフォーマットで出力する。*/
  343.     function lfGetCSVList($array{
  344.         $line '';
  345.         if (count($array0{
  346.             foreach($array as $key => $val{
  347.                 $val mb_convert_encoding($valCHAR_CODECHAR_CODE);
  348.                 $val str_replace("\"""\\\""$val);
  349.                 $line .= "\"".$val."\",";
  350.             }
  351.             $line ereg_replace(",$""\r\n"$line);
  352.         }else{
  353.             return false;
  354.         }
  355.         return $line;
  356.     }
  357.  
  358.     // 全テーブルリストを取得する
  359.     function lfGetTableList(){
  360.         $objQuery new SC_Query();
  361.  
  362.         if(DB_TYPE == "pgsql"){
  363.             $sql "SELECT tablename FROM pg_tables WHERE tableowner = ? ORDER BY tablename ; ";
  364.             $arrRet $objQuery->getAll($sqlarray(DB_USER));
  365.             $arrRet SC_Utils_Ex::sfSwapArray($arrRet);
  366.             $arrRet $arrRet['tablename'];
  367.         }else if(DB_TYPE == "mysql"){
  368.             $sql "SHOW TABLES;";
  369.             $arrRet $objQuery->getAll($sql);
  370.             $arrRet SC_Utils_Ex::sfSwapArray($arrRet);
  371.  
  372.             // キーを取得
  373.             $arrKey array_keys($arrRet);
  374.  
  375.             $arrRet $arrRet[$arrKey[0]];
  376.         }
  377.         return $arrRet;
  378.     }
  379.  
  380.     // 自動採番型をCSV出力形式に変換する
  381.     function lfGetAutoIncrement($table_name){
  382.         $arrColList $this->lfGetColumnList($table_name);
  383.         $ret "";
  384.  
  385.         if(DB_TYPE == "pgsql"){
  386.             $match 'nextval(\'';
  387.         }else if(DB_TYPE == "mysql"){
  388.             $match "auto_incr";
  389.         }
  390.  
  391.         foreach($arrColList['col_def'as $key => $val){
  392.  
  393.             if (substr($val,0,9== $match{
  394.                 $col $arrColList['col_name'][$key];
  395.                 $autoVal $this->lfGetAutoIncrementVal($table_name$col);
  396.                 $ret .= "$table_name,$col,$autoVal\n";
  397.             }
  398.         }
  399.  
  400.         return $ret;
  401.     }
  402.  
  403.     // テーブル構成を取得する
  404.     Function Lfgetcolumnlist($table_name){
  405.         $objQuery new SC_Query();
  406.  
  407.         if(DB_TYPE == "pgsql"){
  408.             $sql "SELECT
  409.                     a.attname, t.typname, a.attnotnull, d.adsrc as defval, a.atttypmod, a.attnum as fldnum, e.description
  410.                 FROM
  411.                     pg_class c,
  412.                     pg_type t,
  413.                     pg_attribute a left join pg_attrdef d on (a.attrelid=d.adrelid and a.attnum=d.adnum)
  414.                                    left join pg_description e on (a.attrelid=e.objoid and a.attnum=e.objsubid)
  415.                 WHERE (c.relname=?) AND (c.oid=a.attrelid) AND (a.atttypid=t.oid) AND a.attnum > 0
  416.                 ORDER BY fldnum";
  417.             $arrColList $objQuery->getAll($sqlarray($table_name));
  418.             $arrColList SC_Utils_Ex::sfSwapArray($arrColList);
  419.  
  420.             $arrRet['col_def'$arrColList['defval'];
  421.             $arrRet['col_name'$arrColList['attname'];
  422.         }else if(DB_TYPE == "mysql"){
  423.             $sql "SHOW COLUMNS FROM $table_name";
  424.             $arrColList $objQuery->getAll($sql);
  425.             $arrColList SC_Utils_Ex::sfSwapArray($arrColList);
  426.  
  427.             $arrRet['col_def'$arrColList['Extra'];
  428.             $arrRet['col_name'$arrColList['Field'];
  429.         }
  430.         return $arrRet;
  431.     }
  432.  
  433.     // 自動採番型の値を取得する
  434.     function lfGetAutoIncrementVal($table_name $colname ""){
  435.         $objQuery new SC_Query();
  436.         $ret "";
  437.  
  438.         if(DB_TYPE == "pgsql"){
  439.             $ret $objQuery->nextval($table_name$colname1;
  440.         }else if(DB_TYPE == "mysql"){
  441.             $sql "SHOW TABLE STATUS LIKE ?";
  442.             $arrData $objQuery->getAll($sqlarray($table_name));
  443.             $ret $arrData[0]['Auto_increment'];
  444.         }
  445.         return $ret;
  446.     }
  447.  
  448.     // バックアップテーブルにデータを更新する
  449.     function lfUpdBkupData($data){
  450.         $objQuery new SC_Query();
  451.  
  452.         $sql "INSERT INTO dtb_bkup (bkup_name,bkup_memo,create_date) values (?,?,now())";
  453.         $objQuery->query($sqlarray($data['bkup_name'],$data['bkup_memo']));
  454.     }
  455.  
  456.     // バックアップテーブルからデータを取得する
  457.     function lfGetBkupData($where ""$data array()){
  458.         $objQuery new SC_Query();
  459.  
  460.         $sql "SELECT bkup_name, bkup_memo, create_date FROM dtb_bkup ";
  461.         if ($where != "")    $sql .= $where;
  462.  
  463.         $ret $objQuery->getall($sql,$data);
  464.  
  465.         $glob glob($this->bkup_dir '*' $this->bkup_ext);
  466.         if (is_array($glob)) {
  467.             foreach ($glob as $path{
  468.                 $bkup_name basename($path$this->bkup_ext);
  469.                 unset($row);
  470.                 foreach (array_keys($retas $key{
  471.                     if ($ret[$key]['bkup_name'== $bkup_name{
  472.                         $row =$ret[$key];
  473.                     }
  474.                 }
  475.                 if (!isset($row)) {
  476.                     $ret[array();
  477.                     $row =$ret[array_pop(array_keys($ret))];
  478.                     $row['bkup_name'$bkup_name;
  479.                     $row['bkup_memo''(ファイル)';
  480.                     $row['create_date'date("Y-m-d H:i:s"filemtime($path));
  481.                 }
  482.             }
  483.         }
  484.  
  485.         return $ret;
  486.     }
  487.  
  488.     // バックアップファイルをリストアする
  489.     function lfRestore($bkup_name){
  490.         // 実行時間を制限しない
  491.         set_time_limit(0);
  492.         
  493.         $objQuery new SC_Query(""false);
  494.         $csv_data "";
  495.         $err true;
  496.  
  497.         $bkup_dir $this->bkup_dir $bkup_name "/";
  498.  
  499.         //バックアップフォルダに移動する
  500.         chdir($this->bkup_dir);
  501.  
  502.         //圧縮フラグTRUEはgzip解凍をおこなう
  503.         $tar new Archive_Tar($bkup_name $this->bkup_extTRUE);
  504.  
  505.         //指定されたフォルダ内に解凍する
  506.         $err $tar->extract("./");
  507.  
  508.         // 無事解凍できれば、リストアを行う
  509.         if ($err{
  510.  
  511.             // トランザクション開始
  512.             $objQuery->begin();
  513.  
  514.             // DBをクリア
  515.             $err $this->lfDeleteAll($objQuery);
  516.  
  517.             // INSERT実行
  518.             if ($err$err $this->lfExeInsertSQL($objQuery$bkup_dir "bkup_data.csv");
  519.  
  520.             // 自動採番の値をセット
  521.             if ($err$this->lfSetAutoInc($objQuery$bkup_dir "autoinc_data.csv");
  522.  
  523.             // 各種ファイルのコピー
  524.             /**
  525.             if ($err) {
  526.                 // 画像のコピー
  527.                 $image_dir = $bkup_dir . "save_image/";
  528.                 $copy_mess = "";
  529.                 $copy_mess = SC_Utils_Ex::sfCopyDir($image_dir, "../../upload/save_image/", $copy_mess, true);
  530.  
  531.                 // テンプレートのコピー
  532.                 $tmp_dir = $bkup_dir . "templates/";
  533.                 $copy_mess = "";
  534.                 $copy_mess = SC_Utils_Ex::sfCopyDir($tmp_dir, "../../user_data/templates/", $copy_mess, true);
  535.  
  536.                 // インクルードファイルのコピー
  537.                 $inc_dir = $bkup_dir . "include/";
  538.                 $copy_mess = "";
  539.                 $copy_mess = SC_Utils_Ex::sfCopyDir($inc_dir, "../../user_data/include/", $copy_mess, true);
  540.  
  541.                 // CSSのコピー
  542.                 $css_dir = $bkup_dir . "css/";
  543.                 $copy_mess = "";
  544.                 $copy_mess = SC_Utils_Ex::sfCopyDir($css_dir, "../../user_data/css/", $copy_mess, true);
  545.  
  546.                 // バックアップデータの削除
  547.                 SC_Utils_Ex::sfDelFile($bkup_dir);
  548.             }**/
  549.  
  550.             // リストア成功ならコミット失敗ならロールバック
  551.             if ($err{
  552.                 $objQuery->commit();
  553.                 $this->restore_msg "リストア終了しました。";
  554.                 $this->restore_err true;
  555.             }else{
  556.                 $objQuery->rollback();
  557.                 $this->restore_msg "リストアに失敗しました。";
  558.                 $this->restore_name $bkup_name;
  559.                 $this->restore_err false;
  560.             }
  561.         }
  562.     }
  563.  
  564.     // CSVファイルからインサート実行
  565.     function lfExeInsertSQL($objQuery$csv){
  566.  
  567.         $sql "";
  568.         $base_sql "";
  569.         $tbl_flg false;
  570.         $col_flg false;
  571.         $ret true;
  572.         $pagelayout_flg false;
  573.         $mode $this->mode;
  574.  
  575.         // csvファイルからデータの取得
  576.         $fp fopen($csv"r");
  577.         while (!feof($fp)) {
  578.             $data fgetcsv($fp1000000);
  579.  
  580.             //空白行のときはテーブル変更
  581.             if (count($data<= and $data[0== ""{
  582.                 $base_sql "";
  583.                 $tbl_flg false;
  584.                 $col_flg false;
  585.                 continue;
  586.             }
  587.  
  588.             // テーブルフラグがたっていない場合にはテーブル名セット
  589.             if (!$tbl_flg{
  590.                 $base_sql "INSERT INTO $data[0] ";
  591.                 $tbl_flg true;
  592.  
  593.                 if($data[0== "dtb_pagelayout"){
  594.                     $pagelayout_flg true;
  595.                 }
  596.  
  597.                 continue;
  598.             }
  599.  
  600.             // カラムフラグがたっていない場合にはカラムセット
  601.             if (!$col_flg{
  602.                 if ($mode != "restore_config"){
  603.                     $base_sql .= " ( $data[0] ";
  604.                     for($i 1$i count($data)$i++){
  605.                         $base_sql .= "," $data[$i];
  606.                     }
  607.                     $base_sql .= " ) ";
  608.                 }
  609.                 $col_flg true;
  610.                 continue;
  611.             }
  612.  
  613.             // インサートする値をセット
  614.             $sql $base_sql "VALUES ( ? ";
  615.             for($i 1$i count($data)$i++){
  616.                 $sql .= ", ?";
  617.             }
  618.             $sql .= " );";
  619.             $data str_replace("\\\"""\""$data);
  620.             $err $objQuery->query($sql$data);
  621.  
  622.             // エラーがあれば終了
  623.             if ($err->message != ""){
  624.                 SC_Utils_Ex::sfErrorHeader(">> " $objQuery->getlastquery(false));
  625.                 return false;
  626.             }
  627.  
  628.             if ($pagelayout_flg{
  629.                 // dtb_pagelayoutの場合には最初のデータはpage_id = 0にする
  630.                 $sql "UPDATE dtb_pagelayout SET page_id = '0'";
  631.                 $objQuery->query($sql);
  632.                 $pagelayout_flg false;
  633.             }
  634.  
  635.             // タイムアウトを防ぐ
  636.             SC_Utils_Ex::sfFlush();
  637.         }
  638.         fclose($fp);
  639.  
  640.         return $ret;
  641.     }
  642.  
  643.     // 自動採番をセット
  644.     function lfSetAutoInc($objQuery$csv){
  645.         // csvファイルからデータの取得
  646.         $arrCsvData file($csv);
  647.  
  648.         foreach($arrCsvData as $key => $val){
  649.             $arrData split(","trim($val));
  650.  
  651.             if ($arrData[2== 0)    $arrData[21;
  652.             $objQuery->setval($arrData[0]$arrData[1]$arrData[2]);
  653.         }
  654.     }
  655.  
  656.     // DBを全てクリアする
  657.     function lfDeleteAll($objQuery){
  658.         $ret true;
  659.  
  660.         $arrTableList $this->lfGetTableList();
  661.  
  662.         foreach($arrTableList as $key => $val){
  663.             // バックアップテーブルは削除しない
  664.             if ($val != "dtb_bkup"{
  665.                 $trun_sql "DELETE FROM $val;";
  666.                 $ret $objQuery->query($trun_sql);
  667.  
  668.                 if (!$retreturn $ret;
  669.             }
  670.         }
  671.  
  672.         return $ret;
  673.     }
  674.  
  675.     // バックアップテーブルを作成する
  676.     function lfCreateBkupTable(){
  677.         $objQuery new SC_Query();
  678.  
  679.         // テーブルの存在チェック
  680.         $arrTableList $this->lfGetTableList();
  681.  
  682.         if(!in_array("dtb_bkup"$arrTableList)){
  683.             // 存在していなければ作成
  684.             $cre_sql "
  685.             create table dtb_bkup
  686.             (
  687.                 bkup_name   text,
  688.                 bkup_memo   text,
  689.                 create_date timestamp,
  690.                 PRIMARY KEY (bkup_name)
  691.             );
  692.         ";
  693.  
  694.             $objQuery->query($cre_sql);
  695.         }
  696.     }
  697. }
  698. ?>

Documentation generated on Tue, 28 Apr 2009 18:11:50 +0900 by phpDocumentor 1.4.2