source: temp/trunk/html/admin/system/bkup.php @ 5737

Revision 5737, 10.6 KB checked in by kakinaka, 20 years ago (diff)

blank

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1<?php
2
3require_once("../require.php");
4require_once("../../../data/module/Tar.php");
5//require_once("./Tar.php");
6
7//¥Ú¡¼¥¸´ÉÍý¥¯¥é¥¹
8class LC_Page {
9    //¥³¥ó¥¹¥È¥é¥¯¥¿
10    function LC_Page() {
11        //¥á¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤Î»ØÄê
12        $this->tpl_mainpage = 'system/bkup.tpl';
13        $this->tpl_subnavi = 'system/subnavi.tpl';
14        $this->tpl_mainno = 'system';       
15        $this->tpl_subno = 'bkup';
16        $this->tpl_subtitle = '¥Ð¥Ã¥¯¥¢¥Ã¥×´ÉÍý';
17       
18//      $this->bkup_dir = ROOT_DIR . USER_DIR . "bkup/";
19        $this->bkup_dir = ROOT_DIR . "html/test/" . "bkup/";
20//      $this->bkup_dir = "../../test/bkup/";
21    }
22}
23
24$objPage = new LC_Page();
25$objView = new SC_AdminView();
26$objQuery = new SC_Query();
27
28// ¥»¥Ã¥·¥ç¥ó¥¯¥é¥¹
29$objSess = new SC_Session();
30// ǧ¾Ú²ÄÈݤÎȽÄê
31sfIsSuccess($objSess);
32
33// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Æ¡¼¥Ö¥ë¤¬¤Ê¤±¤ì¤ÐºîÀ®¤¹¤ë
34lfCreateBkupTable();
35
36switch($_POST['mode']) {
37// ¥Ð¥Ã¥¯¥¢¥Ã¥×¤òºîÀ®¤¹¤ë
38case 'bkup':
39    // ÆþÎÏʸ»úÎó¤ÎÊÑ´¹
40    $arrData = lfConvertParam($_POST);
41
42    // ¥¨¥é¡¼¥Á¥§¥Ã¥¯
43    $arrErr = lfCheckError($arrData);
44
45    // ¥¨¥é¡¼¤¬¤Ê¤±¤ì¤Ð¥Ð¥Ã¥¯¥¢¥Ã¥×½èÍý¤ò¹Ô¤¦   
46    if (count($arrErr) <= 0) {
47        // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ëºîÀ®
48        $arrErr = lfCreateBkupData($arrData['bkup_name']);
49       
50        // DB¤Ë¥Ç¡¼¥¿¹¹¿·
51        if (count($arrErr) <= 0) {
52            lfUpdBkupData($arrData);
53        }else{
54            $arrForm = $arrData;
55        }
56    }else{
57        $arrForm = $arrData;
58    }
59
60    break;
61   
62// ¥ê¥¹¥È¥¢
63case 'restore':
64    lfRestore($_POST['list_name']);
65
66    break;
67   
68// ºï½ü
69case 'del':
70    // ¥Õ¥¡¥¤¥ë¤Îºï½ü
71    unlink($objPage->bkup_dir.$_POST['list_name'] . ".tar.gz");
72
73    // DB¤«¤éºï½ü
74    $delsql = "DELETE FROM dtb_bkup WHERE bkup_name = ?";
75    $objQuery->query($delsql, array($_POST['list_name']));
76
77    break;
78default:
79    break;
80}
81
82// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë
83$arrBkupList = lfGetBkupData("ORDER BY create_date DESC");
84
85// ¥Æ¥ó¥×¥ì¡¼¥È¥Õ¥¡¥¤¥ë¤ËÅϤ¹¥Ç¡¼¥¿¤ò¥»¥Ã¥È
86$objPage->arrErr = $arrErr;
87$objPage->arrForm = $arrForm;
88$objPage->arrBkupList = $arrBkupList;
89
90$objView->assignobj($objPage);      //ÊÑ¿ô¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¥¢¥µ¥¤¥ó¤¹¤ë
91$objView->display(MAIN_FRAME);      //¥Æ¥ó¥×¥ì¡¼¥È¤Î½ÐÎÏ
92
93//-------------------------------------------------------------------------------------------------------
94/* ¼èÆÀʸ»úÎó¤ÎÊÑ´¹ */
95function lfConvertParam($array) {
96    /*
97     *  ʸ»úÎó¤ÎÊÑ´¹
98     *  K :  ¡ÖȾ³Ñ(ŽÊŽÝ޶ޏ)ÊÒ²¾Ì¾¡×¤ò¡ÖÁ´³ÑÊÒ²¾Ì¾¡×¤ËÊÑ´¹
99     *  C :  ¡ÖÁ´³Ñ¤Ò¤é²¾Ì¾¡×¤ò¡ÖÁ´³Ñ¤«¤¿²¾Ì¾¡×¤ËÊÑ´¹
100     *  V :  ÂùÅÀÉÕ¤­¤Îʸ»ú¤ò°ìʸ»ú¤ËÊÑ´¹¡£"K","H"¤È¶¦¤Ë»ÈÍѤ·¤Þ¤¹ 
101     *  n :  ¡ÖÁ´³Ñ¡×¿ô»ú¤ò¡ÖȾ³Ñ(ŽÊŽÝ޶ޏ)¡×¤ËÊÑ´¹
102     *  a :  Á´³Ñ±Ñ¿ô»ú¤òȾ³Ñ±Ñ¿ô»ú¤ËÊÑ´¹¤¹¤ë
103     */
104    $arrConvList['bkup_name'] = "a";
105    $arrConvList['bkup_memo'] = "KVa";
106   
107    // ʸ»úÊÑ´¹
108    foreach ($arrConvList as $key => $val) {
109        // POST¤µ¤ì¤Æ¤­¤¿ÃͤΤßÊÑ´¹¤¹¤ë¡£
110        if(isset($array[$key])) {
111            $array[$key] = mb_convert_kana($array[$key] ,$val);
112        }
113    }
114    return $array;
115}
116
117// ¥¨¥é¡¼¥Á¥§¥Ã¥¯
118function lfCheckError($array){
119    $objErr = new SC_CheckError($array);
120   
121    $objErr->doFunc(array("¥Ð¥Ã¥¯¥¢¥Ã¥×̾", "bkup_name", STEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK","NO_SPTAB","ALNUM_CHECK"));
122    $objErr->doFunc(array("¥Ð¥Ã¥¯¥¢¥Ã¥×¥á¥â", "bkup_memo", MTEXT_LEN), array("MAX_LENGTH_CHECK"));
123   
124    // ½ÅÊ£¥Á¥§¥Ã¥¯
125    $ret = lfGetBkupData("WHERE bkup_name = ?", array($array['bkup_name']));
126    if (count($ret) > 0) {
127        $objErr->arrErr['bkup_name'] = "¥Ð¥Ã¥¯¥¢¥Ã¥×̾¤¬½ÅÊ£¤·¤Æ¤¤¤Þ¤¹¡£ÊÌ̾¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£";
128    }
129
130    return $objErr->arrErr;
131}
132
133// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ëºîÀ®
134function lfCreateBkupData($bkup_name){
135    global $objPage;
136    $objQuery = new SC_Query();
137    $csv_data = "";
138    $csv_autoinc = "";
139    $err = true;
140   
141    $bkup_dir = $objPage->bkup_dir;
142    $bkup_dir = $bkup_dir . $bkup_name . "/";
143
144    // Á´¥Æ¡¼¥Ö¥ë¼èÆÀ
145    $arrTableList = lfGetTableList();
146   
147    // ³Æ¥Æ¡¼¥Ö¥ë¾ðÊó¤ò¼èÆÀ¤¹¤ë
148    foreach($arrTableList as $key => $val){
149       
150        if ($val != "dtb_bkup") {
151           
152            // ¼«Æ°ºÎÈÖ·¿¤Î¹½À®¤ò¼èÆÀ¤¹¤ë
153            $csv_autoinc .= lfGetAutoIncrement($val);
154           
155            //sfprintr($csv_autoinc);
156           
157            // Á´¥Ç¡¼¥¿¤ò¼èÆÀ
158            $arrData = $objQuery->getAll("SELECT * FROM $val");
159   
160            // CSV¥Ç¡¼¥¿À¸À®
161            if (count($arrData) > 0) {
162               
163                // ¥«¥é¥à¤òCSV·Á¼°¤ËÀ°¤¨¤ë
164                $arrKyes = sfGetCommaList(array_keys($arrData[0]), false);
165               
166                // ¥Ç¡¼¥¿¤òCSV·Á¼°¤ËÀ°¤¨¤ë
167                $data = "";
168                foreach($arrData as $data_key => $data_val){
169                    $data .= lfGetCSVList($arrData[$data_key]);
170                }
171               
172                // CSV½ÐÎϥǡ¼¥¿À¸À®
173                $csv_data .= $val . "\n";
174                $csv_data .= $arrKyes . "\n";
175                $csv_data .= $data;
176                $csv_data .= "\n";
177            }   
178        }
179    }
180
181    $csv_file = $bkup_dir . "bkup_data.csv";
182    $csv_autoinc_file = $bkup_dir . "autoinc_data.csv";
183    // CSV½ÐÎÏ
184    // ¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤·¤Æ¤¤¤Ê¤±¤ì¤ÐºîÀ®¤¹¤ë     
185    if (!is_dir(dirname($csv_file))) {
186        $err = mkdir(dirname($csv_file));
187    }
188    if ($err) {
189        // data¤òCSV½ÐÎÏ
190        $fp = fopen($csv_file,"w");
191        if($fp) {
192            $err = fwrite($fp, $csv_data);
193            fclose($fp);
194        }
195       
196        // ¼«Æ°ºÎÈÖ¤òCSV½ÐÎÏ
197        $fp = fopen($csv_autoinc_file,"w");
198        if($fp) {
199            $err = fwrite($fp, $csv_autoinc);
200            fclose($fp);
201        }
202    }
203
204    // ¾¦ÉʲèÁü¥Õ¥¡¥¤¥ë¤ò¥³¥Ô¡¼
205    if ($err) {
206        // ¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤·¤Æ¤¤¤Ê¤±¤ì¤ÐºîÀ®¤¹¤ë     
207        $image_dir = $bkup_dir . "save_image/";
208        if (!is_dir(dirname($image_dir))) $err = mkdir(dirname($image_dir));       
209        $copy_mess = "";
210        $copy_mess = sfCopyDir("../../upload/save_image/",$image_dir, $copy_mess);
211
212        //°µ½Ì¥Õ¥é¥°TRUE¤Ïgzip°µ½Ì¤ò¤ª¤³¤Ê¤¦
213        $tar = new Archive_Tar($objPage->bkup_dir . $bkup_name.".tar.gz", TRUE);
214
215        //bkup¥Õ¥©¥ë¥À¤Ë°Üư¤¹¤ë
216        chdir($objPage->bkup_dir);
217
218        //°µ½Ì¤ò¤ª¤³¤Ê¤¦
219        $zip = $tar->create("./" . $bkup_name . "/");
220
221        // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤Îºï½ü
222        if ($zip) sfDelFile($bkup_dir);
223    }
224
225    if (!$err) {
226        $arrErr['bkup_name'] = "¥Ð¥Ã¥¯¥¢¥Ã¥×¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£";
227    }
228   
229    return $arrErr;
230}
231
232/* ÇÛÎó¤ÎÍ×ÁǤòCSV¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç½ÐÎϤ¹¤ë¡£*/
233function lfGetCSVList($array) {
234    if (count($array) > 0) {
235        foreach($array as $key => $val) {
236            if ($val == "") {
237                $line .= "NULL,";
238            }else{
239                $line .= "'".$val."',";
240            }
241        }
242        $line = ereg_replace(",$", "\n", $line);
243        return $line;
244    }else{
245        return false;
246    }
247}
248
249// Á´¥Æ¡¼¥Ö¥ë¥ê¥¹¥È¤ò¼èÆÀ¤¹¤ë
250function lfGetTableList(){
251    $objQuery = new SC_Query();
252   
253    if(DB_TYPE == "pgsql"){
254        $sql = "SELECT tablename FROM pg_tables WHERE tableowner = ? ORDER BY tablename ; ";
255        $arrRet = $objQuery->getAll($sql, array(DB_USER));
256        $arrRet = sfSwapArray($arrRet);
257        $arrRet = $arrRet['tablename'];
258    }else if(DB_TYPE == "mysql"){
259       
260    }
261   
262    return $arrRet;
263}
264
265// ¼«Æ°ºÎÈÖ·¿¤òCSV½ÐÎÏ·Á¼°¤ËÊÑ´¹¤¹¤ë
266function lfGetAutoIncrement($table_name){
267    $arrColList = lfGetColumnList($table_name);
268    $ret = "";
269    foreach($arrColList['defval'] as $key => $val){
270        if (substr($val,0,9) == 'nextval(\'') {
271            $autoVal = lfGetAutoIncrementVal($table_name, $arrColList['attname'][$key]);
272            $ret .= "$table_name,$autoVal\n";
273        }
274    }
275   
276    return $ret;
277}
278
279// ¥Æ¡¼¥Ö¥ë¹½À®¤ò¼èÆÀ¤¹¤ë
280function lfGetColumnList($table_name){
281    $objQuery = new SC_Query();
282
283    if(DB_TYPE == "pgsql"){
284        $sql = "SELECT
285                    a.attname, t.typname, a.attnotnull, d.adsrc as defval, a.atttypmod, a.attnum as fldnum, e.description
286                FROM
287                    pg_class c,
288                    pg_type t,
289                    pg_attribute a left join pg_attrdef d on (a.attrelid=d.adrelid and a.attnum=d.adnum)
290                                   left join pg_description e on (a.attrelid=e.objoid and a.attnum=e.objsubid)
291                WHERE (c.relname=?) AND (c.oid=a.attrelid) AND (a.atttypid=t.oid) AND a.attnum > 0
292                ORDER BY fldnum";
293        $arrRet = $objQuery->getAll($sql, array($table_name));
294    }
295   
296    return sfSwapArray($arrRet);
297}
298
299// ¼«Æ°ºÎÈÖ·¿¤ÎÃͤò¼èÆÀ¤¹¤ë
300function lfGetAutoIncrementVal($table_name , $colname = ""){
301    $objQuery = new SC_Query();
302    $ret = "";
303
304    if(DB_TYPE == "pgsql"){
305        $ret = $objQuery->nextval($table_name, $colname);
306    }
307    return $ret;
308}
309
310// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Æ¡¼¥Ö¥ë¤Ë¥Ç¡¼¥¿¤ò¹¹¿·¤¹¤ë
311function lfUpdBkupData($data){
312    $objQuery = new SC_Query();
313   
314    $sql = "INSERT INTO dtb_bkup (bkup_name,bkup_memo,create_date) values (?,?,now())";
315    $objQuery->query($sql, array($data['bkup_name'],$data['bkup_memo']));
316}
317
318// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Æ¡¼¥Ö¥ë¤«¤é¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë
319function lfGetBkupData($where = "", $data = array()){
320    $objQuery = new SC_Query();
321   
322    $sql = "SELECT bkup_name, bkup_memo, create_date FROM dtb_bkup ";
323    if ($where != "")   $sql .= $where;
324   
325    $ret = $objQuery->getall($sql,$data);
326   
327    return $ret;
328}
329
330// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ò¥ê¥¹¥È¥¢¤¹¤ë
331function lfRestore($bkup_name){
332    global $objPage;
333    $objQuery = new SC_Query("", false);
334    $csv_data = "";
335    $err = true;
336   
337    $bkup_dir = $objPage->bkup_dir . $bkup_name . "/";
338   
339    //file¥Õ¥©¥ë¥À¤Ë°Üư¤¹¤ë
340    chdir($objPage->bkup_dir);
341   
342    //°µ½Ì¥Õ¥é¥°TRUE¤Ïgzip²òÅà¤ò¤ª¤³¤Ê¤¦
343    $tar = new Archive_Tar($bkup_name . ".tar.gz", TRUE);
344   
345    //»ØÄꤵ¤ì¤¿¥Õ¥©¥ë¥ÀÆâ¤Ë²òÅह¤ë
346    $err = $tar->extract("./");
347   
348    // ̵»ö²òÅà¤Ç¤­¤ì¤Ð¡¢¥ê¥¹¥È¥¢¤ò¹Ô¤¦
349    if ($err) {
350       
351        $objQuery->begin();
352       
353        // DB¤ò¥¯¥ê¥¢
354        $err = lfDeleteAll($objQuery);
355       
356        // INSERT¼Â¹Ô
357        if ($err) $err = lfExeInsertSQL($objQuery, $bkup_dir . "bkup_data.csv");
358
359        if ($err) {
360            // ²èÁü¤Î¥³¥Ô¡¼
361            $image_dir = $bkup_dir . "save_image/";
362            $copy_mess = "";
363            $copy_mess = sfCopyDir($image_dir, "../../upload/save_image/", $copy_mess);     
364   
365            // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Ç¡¼¥¿¤Îºï½ü
366            sfDelFile($bkup_dir);
367        }
368       
369        // ¥ê¥¹¥È¥¢À®¸ù¤Ê¤é¥³¥ß¥Ã¥È¼ºÇԤʤé¥í¡¼¥ë¥Ð¥Ã¥¯
370        if ($err) {
371            $objQuery->commit();
372            $objPage->restore_msg = "¥ê¥¹¥È¥¢½ªÎ»¤·¤Þ¤·¤¿¡£";
373        }else{
374            $objQuery->rollback();
375            $objPage->restore_msg = "¥ê¥¹¥È¥¢¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£";
376        }
377    }
378}
379
380// CSV¥Õ¥¡¥¤¥ë¤«¤é¥¤¥ó¥µ¡¼¥È¼Â¹Ô
381function lfExeInsertSQL($objQuery, $csv){
382       
383    // csv¥Õ¥¡¥¤¥ë¤«¤é¥Ç¡¼¥¿¤Î¼èÆÀ
384    $arrCsvData = file($csv);
385
386    $sql = "";
387    $base_sql = "";
388    $tbl_flg = false;
389    $col_flg = false;
390    $ret = true;
391   
392    foreach($arrCsvData as $key => $val){
393        $data = trim($val);
394       
395        //¶õÇò¹Ô¤Î¤È¤­¤Ï¥Æ¡¼¥Ö¥ëÊѹ¹
396        if ($data == "") {
397            $base_sql = "";
398            $tbl_flg = false;
399            $col_flg = false;
400            continue;
401        }
402       
403        // ¥Æ¡¼¥Ö¥ë¥Õ¥é¥°¤¬¤¿¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¥Æ¡¼¥Ö¥ë̾¥»¥Ã¥È
404        if (!$tbl_flg) {
405            $base_sql = "INSERT INTO $data ";
406            $tbl_flg = true;
407            continue;
408        }
409       
410        // ¥«¥é¥à¥Õ¥é¥°¤¬¤¿¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¥«¥é¥à¥»¥Ã¥È
411        if (!$col_flg) {
412            $base_sql .= " ($data) VALUES ";
413            $col_flg = true;
414            continue;
415        }
416       
417        // ¥¤¥ó¥µ¡¼¥È¤¹¤ëÃͤò¥»¥Ã¥È
418        $sql = $base_sql . " ($data);\n";
419        $err = $objQuery->query($sql);
420       
421        // ¥¨¥é¡¼¤¬¤¢¤ì¤Ð½ªÎ»
422        if (count($err) > 0){
423            return false;
424        }
425       
426    }
427    return $ret;
428}
429
430// DB¤òÁ´¤Æ¥¯¥ê¥¢¤¹¤ë
431function lfDeleteAll($objQuery){
432    $ret = true;
433
434    $arrTableList = lfGetTableList();
435   
436    foreach($arrTableList as $key => $val){
437        // ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Æ¡¼¥Ö¥ë¤Ïºï½ü¤·¤Ê¤¤
438        if ($val != "dtb_bkup") {
439            $trun_sql = "DELETE FROM $val;";
440            $ret = $objQuery->query($trun_sql);
441           
442            if (!$ret) return $ret;
443        }
444    }
445   
446    return $ret;
447}
448
449// ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Æ¡¼¥Ö¥ë¤òºîÀ®¤¹¤ë
450function lfCreateBkupTable(){
451    $objQuery = new SC_Query();
452   
453    // ¥Æ¡¼¥Ö¥ë¤Î¸ºß¥Á¥§¥Ã¥¯
454    $arrTableList = lfGetTableList();
455   
456    if(array_key_exists("dtb_bkup", $arrTableList)){
457        // ¸ºß¤·¤Æ¤¤¤Ê¤±¤ì¤ÐºîÀ®
458        $cre_sql = "
459            create table dtb_bkup
460            (
461                bkup_name   text,
462                bkup_memo   text,
463                create_date timestamp
464            );
465        ";
466       
467        $objQuery->query($cre_sql);
468    }
469   
470}
471
472
473?>
Note: See TracBrowser for help on using the repository browser.