Ignore:
Timestamp:
2011/05/31 03:44:22 (12 years ago)
Author:
Seasoft
Message:

#1339 (バックアップファイルのCSVエスケープに誤り)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_11-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php

    r20911 r20965  
    2424// {{{ requires 
    2525require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php'; 
     26require_once CLASS_EX_REALDIR . 'helper_extends/SC_Helper_CSV_Ex.php'; 
    2627require_once DATA_REALDIR. 'module/Tar.php'; 
    2728/** 
     
    254255     * バックアップファイル作成. 
    255256     * 
     257     * TODO $csv_data はデータを大きく保持しすぎに感じる。分割して書き込みたい。 
    256258     * @param string $bkup_name 
    257259     * @return array $arrErr 
     
    262264 
    263265        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    264         $csv_data = ""; 
     266        $csv_data = ''; 
    265267        $csv_autoinc = ""; 
    266268        $arrData = array(); 
     
    274276 
    275277        // 各テーブル情報を取得する 
    276         foreach($arrTableList as $key => $val){ 
    277  
    278             if (!($val == "dtb_bkup" || $val == "mtb_zip")) { 
     278        foreach ($arrTableList as $table) { 
     279 
     280            if (!($table == "dtb_bkup" || $table == "mtb_zip")) { 
    279281 
    280282                // 全データを取得 
    281                 if ($val == "dtb_pagelayout"){ 
    282                     $arrData = $objQuery->getAll("SELECT * FROM $val ORDER BY page_id"); 
     283                if ($table == "dtb_pagelayout"){ 
     284                    $arrData = $objQuery->getAll("SELECT * FROM $table ORDER BY page_id"); 
    283285                }else{ 
    284                     $arrData = $objQuery->getAll("SELECT * FROM $val"); 
     286                    $arrData = $objQuery->getAll("SELECT * FROM $table"); 
    285287                } 
    286288 
     
    288290                if (count($arrData) > 0) { 
    289291 
    290                     // カラムをCSV形式に整える 
    291                     $arrKyes = SC_Utils_Ex::sfGetCommaList(array_keys($arrData[0]), false); 
    292  
    293                     // データをCSV形式に整える 
    294                     $data = ""; 
    295                     foreach($arrData as $data_key => $data_val){ 
    296                         $data .= $this->lfGetCSVList($arrData[$data_key]); 
     292                    // テーブル名 
     293                    $csv_data .= $table . "\r\n"; 
     294 
     295                    // カラム名 
     296                    $csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv(array_keys($arrData[0])) . "\r\n"; 
     297 
     298                    // データ 
     299                    foreach ($arrData as $data_val) { 
     300                        $csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv($data_val) . "\r\n"; 
    297301                    } 
    298                     // CSV出力データ生成 
    299                     $csv_data .= $val . "\r\n"; 
    300                     $csv_data .= $arrKyes . "\r\n"; 
    301                     $csv_data .= $data . "\r\n"; 
     302 
     303                    // テーブル終端 
     304                    $csv_data .= "\r\n"; 
    302305                } 
    303306 
     
    359362 
    360363        return isset($arrErr) ? $arrErr : array(); 
    361     } 
    362  
    363     /* 配列の要素をCSVフォーマットで出力する。*/ 
    364     function lfGetCSVList($array) { 
    365         $line = ''; 
    366         if (count($array) > 0) { 
    367             foreach($array as $key => $val) { 
    368                 $val = mb_convert_encoding($val, CHAR_CODE, CHAR_CODE); 
    369                 $val = str_replace("\"", "\\\"", $val); 
    370                 $line .= "\"".$val."\","; 
    371             } 
    372             $line = ereg_replace(",$", "\r\n", $line); 
    373         }else{ 
    374             return false; 
    375         } 
    376         return $line; 
    377364    } 
    378365 
Note: See TracChangeset for help on using the changeset viewer.