/** * DB登録 * * @return void */ function insertMtbZip($start = 1) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $img_path = USER_URL . USER_PACKAGE_DIR . 'admin/img/basis/'; // 画像パスは admin 固定 ?> <html xmlns='http://www.w3.org/1999/xhtml' lang='ja' xml:lang='ja'> <head> <meta http-equiv='Content-Type' content='text/html; charset=<?php echo CHAR_CODE; ?> ' /> </head> <body> <p>DB 登録進捗状況</p> <div style='background-color: #494E5F;'> <?php // 一部のIEは256バイト以上受け取ってから表示を開始する。 SC_Utils_Ex::sfFlush(true); echo '<img src="' . $img_path . 'zip_install_progress.gif"><br />'; echo '<img src="' . $img_path . 'space_w.gif">'; SC_Utils_Ex::sfFlush(); // 画像を一個表示する件数を求める。 $line_all = $this->countZipCsv(); $disp_line = intval($line_all / IMAGE_MAX); /** 現在行(CSV形式。空行は除く。) */ $cntCurrentLine = 0; /** 挿入した行数 */ $cntInsert = 0; $img_cnt = 0; $fp = $this->openZipCsv(); while (!feof($fp)) { $arrCSV = fgetcsv($fp, ZIP_CSV_LINE_MAX); if (empty($arrCSV)) { continue; } $cntCurrentLine++; if ($cntCurrentLine >= $start) { $sqlval = array(); $sqlval['zip_id'] = $cntCurrentLine; $sqlval['zipcode'] = $arrCSV[2]; $sqlval['state'] = $arrCSV[6]; $sqlval['city'] = $arrCSV[7]; $sqlval['town'] = $arrCSV[8]; $objQuery->insert('mtb_zip', $sqlval); $cntInsert++; } // $disp_line件ごとに進捗表示する if ($cntCurrentLine % $disp_line == 0 && $img_cnt < IMAGE_MAX) { echo '<img src="' . $img_path . 'graph_1_w.gif">'; SC_Utils_Ex::sfFlush(); $img_cnt++; } SC_Utils_Ex::extendTimeOut(); } fclose($fp); echo '<img src="' . $img_path . 'space_w.gif">'; ?> </div> <script type='text/javascript' language='javascript'> <!-- // 完了画面 function complete() { document.open('text/html','replace'); document.clear(); document.write('<p>完了しました。<br />'); document.write("<?php echo $cntInsert; ?> 件を追加しました。</p>"); document.write("<p><a href='?' target='_top'>戻る</a></p>"); document.close(); } // コンテンツを削除するため、タイムアウトで呼び出し。 setTimeout('complete()', 0); // --> </script> </body> </html> <?php }
/** * モバイル端末以外ダウンロード処理 * * @param string $realpath ダウンロードファイルパス * @param string $sdown_filename ダウンロード時の指定ファイル名 */ function lfDownload($realpath, $sdown_filename) { // 拡張子を取得 $extension = pathinfo($realpath, PATHINFO_EXTENSION); $contentType = $this->defaultContentType; // 拡張ContentType判定(拡張子をキーに拡張ContentType対象か判断) if (isset($this->arrContentType[$extension])) { // 拡張ContentType対象の場合は、ContentTypeを変更 $contentType = $this->arrContentType[$extension]; } header('Content-Type: ' . $contentType); //ファイル名指定 header('Content-Disposition: attachment; filename="' . $sdown_filename . '"'); header('Content-Transfer-Encoding: binary'); //キャッシュ無効化 header('Expires: Mon, 26 Nov 1962 00:00:00 GMT'); header('Last-Modified: ' . gmdate('D,d M Y H:i:s') . ' GMT'); //IE6+SSL環境下は、キャッシュ無しでダウンロードできない header('Cache-Control: private'); header('Pragma: private'); //ファイルサイズ指定 $zv_filesize = filesize($realpath); header('Content-Length: ' . $zv_filesize); //ファイル読み込み $handle = fopen($realpath, 'rb'); if ($handle === false) { SC_Utils_Ex::sfDispSiteError(DOWNFILE_NOT_FOUND, '', true); SC_Response_Ex::actionExit(); } while (!feof($handle)) { echo fread($handle, DOWNLOAD_BLOCK * 1024); SC_Utils_Ex::sfFlush(); SC_Utils_Ex::extendTimeOut(); } fclose($handle); }
/** * バックアップファイル作成. * * @param string $bkup_name * @return boolean|int 結果。true:成功 int:失敗 FIXME 本来は int ではなく、エラーメッセージを戻すべき */ function lfCreateBkupData($bkup_name, $work_dir) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $csv_autoinc = ''; $arrData = array(); $success = mkdir($work_dir, 0777, true); if (!$success) { return __LINE__; } // 全テーブル取得 $arrTableList = $objQuery->listTables(); // 各テーブル情報を取得する foreach ($arrTableList as $table) { if ($table == 'dtb_bkup' || $table == 'mtb_zip') { continue; } // dataをCSV出力 $csv_file = $work_dir . $table . '.csv'; $fp = fopen($csv_file, 'w'); if (!$fp) { return __LINE__; } // 全データを取得 $sql = "SELECT * FROM {$table}"; $this->fpOutput =& $fp; $this->first_line = true; $success = $objQuery->doCallbackAll(array(&$this, 'cbOutputCSV'), $sql); unset($this->fpOutput); if ($success === false) { return __LINE__; } fclose($fp); // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } // 自動採番型の構成を取得する $csv_autoinc = $this->lfGetAutoIncrement(); $csv_autoinc_file = $work_dir . 'autoinc_data.csv'; // CSV出力 // 自動採番をCSV出力 $fp = fopen($csv_autoinc_file, 'w'); if ($fp) { if ($csv_autoinc != '') { $success = fwrite($fp, $csv_autoinc); if (!$success) { return __LINE__; } } fclose($fp); } //圧縮フラグTRUEはgzip圧縮をおこなう $tar = new Archive_Tar($this->bkup_dir . $bkup_name . $this->bkup_ext, TRUE); //bkupフォルダに移動する chdir($work_dir); //圧縮をおこなう $zip = $tar->create('./'); return true; }
function lfStartDailyTotal($term, $start, $command = false) { $now_time = time(); // グラフ画像の削除 $path = GRAPH_DIR . "*.png"; system("rm -rf {$path}"); // 削除された受注データの受注詳細情報の削除 $objQuery = new SC_Query(); $where = "order_id IN (SELECT order_id FROM dtb_order WHERE del_flg = 1)"; $objQuery->delete("dtb_order_detail", $where); // 最後に更新された日付を取得 $ret = $objQuery->max("dtb_bat_order_daily", "create_date"); list($batch_last) = split("\\.", $ret); $pass = $now_time - strtotime($batch_last); // 最後のバッチ実行からLOAD_BATCH_PASS秒経過していないと実行しない。 if ($pass < LOAD_BATCH_PASS) { GC_Utils_Ex::gfPrintLog("LAST BATCH " . $arrRet[0]['create_date'] . " > " . $batch_pass . " -> EXIT BATCH {$batch_date}"); return; } // 集計 for ($i = $start; $i < $term; $i++) { // 基本時間から$i日分さかのぼる $tmp_time = $now_time - $i * 24 * 3600; $batch_date = date("Y/m/d", $tmp_time); GC_Utils_Ex::gfPrintLog("LOADING BATCH {$batch_date}"); $this->lfBatOrderDaily($tmp_time); $this->lfBatOrderDailyHour($tmp_time); $this->lfBatOrderAge($tmp_time); // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } }
/** * CSVファイルからインサート実行. * * @param object $objQuery * @param string $csv * @param string $mode * @return void */ function lfExeInsertSQL(&$objQuery, $csv, $mode) { $tbl_flg = false; $col_flg = false; $ret = true; $pagelayout_flg = false; $table_name = ""; $arrVal = array(); $arrCol = array(); // csvファイルからデータの取得 $fp = fopen($csv, 'r'); if ($fp === false) { SC_Utils_Ex::sfDispException($csv . ' のファイルオープンに失敗しました。'); } while (!feof($fp)) { $data = fgetcsv($fp, 1000000); //空白行のときはテーブル変更 if (count($data) <= 1 and $data[0] == "") { $tbl_flg = false; $col_flg = false; $table_name = ""; $arrVal = array(); $arrCol = array(); continue; } // テーブルフラグがたっていない場合にはテーブル名セット if (!$tbl_flg) { $table_name = $data[0]; $tbl_flg = true; if ($table_name == "dtb_pagelayout") { $pagelayout_flg = true; } continue; } // カラムフラグがたっていない場合にはカラムセット if (!$col_flg) { if ($mode != "restore_config") { for ($i = 0; $i < count($data); $i++) { $arrCol[$i] = $data[$i]; } } $col_flg = true; continue; } for ($i = 0; $i < count($data); $i++) { if ($arrCol[$i] != '') { $arrVal[$arrCol[$i]] = $data[$i]; } } $err = $objQuery->insert($table_name, $arrVal); // エラーがあれば終了 if (PEAR::isError($err)) { SC_Utils_Ex::sfErrorHeader(">> " . $objQuery->getlastquery(false)); return false; } if ($pagelayout_flg) { // dtb_pagelayoutの場合には最初のデータはpage_id = 0にする $arrVal['page_id'] = '0'; $objQuery->update("dtb_pagelayout", $arrVal); $pagelayout_flg = false; } // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } fclose($fp); return $ret; }
/** * DB登録 * * @return void */ function insertMtbZip($start = 1) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $img_path = USER_URL . USER_PACKAGE_DIR . "admin/img/basis/"; // 画像パスは admin 固定 ?> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHAR_CODE; ?> " /> </head> <body> <p>DB 登録進捗状況</p> <div style="background-color: #494E5F;"> <?php // 一部のIEは256バイト以上受け取ってから表示を開始する。 SC_Utils_Ex::sfFlush(true); echo '<img src="' . $img_path . 'zip_install_progress.gif"><br />'; echo '<img src="' . $img_path . 'space_w.gif">'; SC_Utils_Ex::sfFlush(); // 画像を一個表示する件数を求める。 $line_all = $this->countZipCsv(); $disp_line = intval($line_all / IMAGE_MAX); /** 現在行(CSV形式。空行は除く。) */ $cntCurrentLine = 0; /** 挿入した行数 */ $cntInsert = 0; $img_cnt = 0; $safe_mode = (bool) ini_get('safe_mode'); $max_execution_time = is_numeric(ini_get('max_execution_time')) ? intval(ini_get('max_execution_time')) : intval(get_cfg_var('max_execution_time')); $fp = $this->openZipCsv(); while (!feof($fp)) { $arrCSV = fgetcsv($fp, ZIP_CSV_LINE_MAX); if (empty($arrCSV)) { continue; } $cntCurrentLine++; if ($cntCurrentLine >= $start) { $sqlval = array(); // $sqlval['code'] = $arrCSV[0]; // $sqlval['old_zipcode'] = $arrCSV[1]; $sqlval['id'] = $cntCurrentLine; $sqlval['zipcode'] = $arrCSV[2]; // $sqlval['state_kana'] = $arrCSV[3]; // $sqlval['city_kana'] = $arrCSV[4]; // $sqlval['town_kana'] = $arrCSV[5]; $sqlval['state'] = $arrCSV[6]; $sqlval['city'] = $arrCSV[7]; $sqlval['town'] = $arrCSV[8]; // $sqlval['flg1'] = $arrCSV[9]; // $sqlval['flg2'] = $arrCSV[10]; // $sqlval['flg3'] = $arrCSV[11]; // $sqlval['flg4'] = $arrCSV[12]; // $sqlval['flg5'] = $arrCSV[13]; // $sqlval['flg6'] = $arrCSV[14]; $objQuery->insert("mtb_zip", $sqlval); $cntInsert++; } // $disp_line件ごとに進捗表示する if ($cntCurrentLine % $disp_line == 0 && $img_cnt < IMAGE_MAX) { echo '<img src="' . $img_path . 'graph_1_w.gif">'; SC_Utils_Ex::sfFlush(); $img_cnt++; } // 暴走スレッドが残留する確率を軽減したタイムアウト防止のロジック // TODO 動作が安定していれば、SC_Utils 辺りに移動したい。 if (!$safe_mode) { // タイムアウトをリセット set_time_limit($max_execution_time); } } fclose($fp); echo '<img src="' . $img_path . 'space_w.gif">'; echo '</div>' . "\n"; ?> <script type="text/javascript" language="javascript"> <!-- // 完了画面 function complete() { document.open("text/html","replace"); document.clear(); document.write("<p>完了しました。<br />"); document.write("<?php echo $cntInsert; ?> 件を追加しました。</p>"); document.write("<p><a href='?' target='_top'>戻る</a></p>"); document.close(); } // コンテンツを削除するため、タイムアウトで呼び出し。 setTimeout("complete()", 0); // --> </script> </body> </html> <?php }
function lfExeInsertSQL($objQuery, $csv) { $sql = ""; $base_sql = ""; $tbl_flg = false; $col_flg = false; $ret = true; $pagelayout_flg = false; $mode = $this->mode; // csvファイルからデータの取得 $fp = fopen($csv, "r"); while (!feof($fp)) { $data = fgetcsv($fp, 1000000); //空白行のときはテーブル変更 if (count($data) <= 1 and $data[0] == "") { $base_sql = ""; $tbl_flg = false; $col_flg = false; continue; } // テーブルフラグがたっていない場合にはテーブル名セット if (!$tbl_flg) { $base_sql = "INSERT INTO {$data['0']} "; $tbl_flg = true; if ($data[0] == "dtb_pagelayout") { $pagelayout_flg = true; } continue; } // カラムフラグがたっていない場合にはカラムセット if (!$col_flg) { if ($mode != "restore_config") { $base_sql .= " ( {$data['0']} "; for ($i = 1; $i < count($data); $i++) { $base_sql .= "," . $data[$i]; } $base_sql .= " ) "; } $col_flg = true; continue; } // インサートする値をセット $sql = $base_sql . "VALUES ( ? "; for ($i = 1; $i < count($data); $i++) { $sql .= ", ?"; } $sql .= " );"; $data = str_replace("\\\"", "\"", $data); $err = $objQuery->query($sql, $data); // エラーがあれば終了 if ($err->message != "") { SC_Utils_Ex::sfErrorHeader(">> " . $objQuery->getlastquery(false)); return false; } if ($pagelayout_flg) { // dtb_pagelayoutの場合には最初のデータはpage_id = 0にする $sql = "UPDATE dtb_pagelayout SET page_id = '0'"; $objQuery->query($sql); $pagelayout_flg = false; } // タイムアウトを防ぐ SC_Utils_Ex::sfFlush(); } fclose($fp); return $ret; }