개발 Q&A

제목 php Excel 업로드시 속도 문제 ?
글쓴이 람이 작성시각 2016/09/19 17:29:08
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 20554   RSS

php excel lib 를 구해서 설치하고 잘 사용하고 있는데...

 

excel의 row 수가 늘어나면 mysql DB에 저장하는 속도도 같이 느려서 서버가 많이 딸리는 증상이 보입니다.

 

혹시 php excel 업로드 할때 속도를 개선할 수 있는 방법이 있을까요 ?

 

아래는 php excel upload 일부 코드 입니다.

 

	function only_number($n) {
		return preg_replace('/[^0-9]/', '', $n);
	}

	if($_FILES['excelfile']['tmp_name']) {
		$file = $_FILES['excelfile']['tmp_name'];

		include_once(ADM_PATH.'/lib/PHPExcel/reader.php');

		$data = new Spreadsheet_Excel_Reader($file, false, "UTF-8");

		// Set output Encoding.
		$data->setOutputEncoding('UTF-8');
		$data->read($file);
		error_reporting(E_ALL ^ E_NOTICE);

		$dup_it_id = array();
		$fail_it_id = array();
		$dup_count = 0;
		$total_count = 0;
		$fail_count = 0;
		$succ_count = 0;

		$it_id = $_POST['it_id'];
		$p_id = $_POST['p_id'];

		// 기존의 상품코드에 해당하는 가격 데이타를 모두 제거 한다.
		$sql = "DELETE FROM wiz_prdprice WHERE it_id='".$it_id."' AND p_id='".$p_id."' ";
		$que = mysql_query($sql);

		for ($i = 6; $i <= $data->sheets[0]['numRows']; $i++) {
			$total_count++;

			$j = 1;

			$prc_sdate				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$yoil						= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$halin					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$exchange				= addslashes($data->sheets[0]['cells'][$i][$j++]);

			$pick01					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$pick02					= addslashes($data->sheets[0]['cells'][$i][$j++]);

			$price11					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price11m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price12					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price13					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price13m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price14					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price14m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optRe1					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optNa1					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optVa11				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optVa12				= addslashes($data->sheets[0]['cells'][$i][$j++]);

			$price21					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price21m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price22					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price23					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price23m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price24					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price24m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optRe2					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optNa2					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optVa21				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optVa22				= addslashes($data->sheets[0]['cells'][$i][$j++]);

			$price31					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price31m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price32					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price33					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price33m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price34					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$price34m				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optRe3					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optNa3					= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optVa31				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$optVa32				= addslashes($data->sheets[0]['cells'][$i][$j++]);
			$it_qty1					= addslashes($data->sheets[0]['cells'][$i][$j++]);

			if($it_qty1 !=0 && $it_qty1 =='') { $it_qty1 = "999"; }
			if($price11 =='') { $price11 = 0; }
			if($price21 =='') { $price21 = 0; }
			if($price31 =='') { $price31 = 0; }

			$prc_Tsum1 = (int)$price11 + (int)$price11m + (int)$price12 + (int)$price13 + (int)$price13m + (int)$price14 + (int)$price14m;
			$prc_Tsum2 = (int)$price21 + (int)$price21m + (int)$price22 + (int)$price23 + (int)$price23m + (int)$price24 + (int)$price24m;
			$prc_Tsum3 = (int)$price31 + (int)$price31m + (int)$price32 + (int)$price33 + (int)$price33m + (int)$price34 + (int)$price34m;
			
			$prc_sdate = date("Y-m-d",strtotime($prc_sdate) -1 );

			$sql_idx = "select max(prc_idx) as idx from wiz_prdprice where p_id='".$p_id."' ";
			$result_idx = mysql_query($sql_idx) or error(mysql_error());
			if($row_idx = mysql_fetch_array($result_idx)){
				$s_idx = $row_idx['idx'] + 1;
			}

			$sql = " INSERT INTO wiz_prdprice
				SET
				`prc_idx` = '".$s_idx."',
				`it_id` = '".$it_id."',
				`p_id` = '".$p_id."',
				`prc_sdate` = '".$prc_sdate."',
				`it_qty1` =  '".(int)$it_qty1."',
				`it_qty2` =  '".(int)$it_qty1."',
				`it_qty3` =  '".(int)$it_qty1."',
				`prc_exchange` =  '".$exchange."',
				`prc_halin` =  '".(int)$halin."',
				`prc_yoil` =  '".$yoil."',
				`prc_Tsum1` =  '".(int)$prc_Tsum1."',
				`prc_required1` =  '".$optRe1."',
				`prc_price11` =  '".(int)$price11."',
				`prc_price11m` =  '".(int)$price11m."',
				`prc_price12` =  '".(int)$price12."',
				`prc_price13` =  '".(int)$price13."',
				`prc_price13m` =  '".(int)$price13m."',
				`prc_price14` =  '".(int)$price14."',
				`prc_price14m` =  '".(int)$price14m."',
				`prc_optNa1` =  '".$optNa1."',
				`prc_optVa11` =  '".$optVa11."',
				`prc_optVa12` =  '".$optVa12."',
				`prc_Tsum2` =  '".(int)$prc_Tsum2."',
				`prc_required2` =  '".$optRe2."',
				`prc_price21` =  '".(int)$price21."',
				`prc_price21m` =  '".(int)$price21m."',
				`prc_price22` =  '".(int)$price22."',
				`prc_price23` =  '".(int)$price23."',
				`prc_price23m` =  '".(int)$price23m."',
				`prc_price24` =  '".(int)$price24."',
				`prc_price24m` =  '".(int)$price24m."',
				`prc_optNa2` =  '".$optNa2."',
				`prc_optVa21` =  '".$optVa21."',
				`prc_optVa22` =  '".$optVa22."',
				`prc_Tsum3` =  '".(int)$prc_Tsum3."',
				`prc_required3` =  '".$optRe3."',
				`prc_price31` =  '".(int)$price31."',
				`prc_price31m` =  '".(int)$price31m."',
				`prc_price32` =  '".(int)$price32."',
				`prc_price33` =  '".(int)$price33."',
				`prc_price33m` =  '".(int)$price33m."',
				`prc_price34` =  '".(int)$price34."',
				`prc_price34m` =  '".(int)$price34m."',
				`prc_optNa3` =  '".$optNa3."',
				`prc_optVa31` =  '".$optVa31."',
				`prc_optVa32` =  '".$optVa32."',
				`prc_icon` =  '0',
				`prc_pick01` = '".$pick01."',
				`prc_pick02` = '".$pick02."',
				`prc_regdate` =  '".date("Y-m-d H:m:s")."'
			";
			//echo $sql;
			mysql_query($sql);

			$suc_sql  = "select * from wiz_prdprice where it_id='".$it_id."' AND p_id='".$p_id."'  AND prc_sdate = '".$prc_sdate."' ";
			$suc_que = mysql_query($suc_sql);
			$rs = mysql_fetch_array($suc_que);
			if($rs['prc_sdate'] == $prc_sdate) {
				$succ_count++;
			} else {
				$fail_count++;
				continue;
			}
			
			$sql = "DELETE FROM wiz_prdprice WHERE prc_sdate = '1970-01-01' AND it_id = '".$it_id."' AND `p_id` = '".$p_id."'";
			$que = mysql_query($sql);

			$sql = "DELETE FROM wiz_prdprice WHERE prc_idx = '0' ";
			$que = mysql_query($sql);

			//echo "</div>";
		}
		$DBC->setLowPrice2($p_id, "free", $it_id);
	}

 

 다음글 CI index.php parameters (4)
 이전글 SELECT 해서 RAND 함수 통해 랜덤으로 출력하되... (12)

댓글

변종원(웅파) / 2016/09/19 17:38:29 / 추천 0
1 row만  insert 하지 않고 여러개 모아서 한꺼번에 하면 좀 빨라질 수 있습니다.
배강민 / 2016/09/19 18:05:03 / 추천 0

저 쿼리들을 sql 덤프파일형태로 떨구고 그 파일을 직접 실행하는 식으로 하면 훨씬 빨라지긴 합니다만, 그를 할 수 있는 상황인지를 봐야겠네요.

완전 실시간으로 처리하셔야만 하는게 아니라면, 큐방식으로 쌓아두고, 백단에서 별도로 진행하면서 유저에게는 그 상태를 보여주게 하는 방법을 많이 쓰기도 합니다.