업로드 형식은 무조건 csv 형식으로 업로드를 해야한다.
엑셀 최대 갯수인 100만건 정도 올라가고
올라가는 시간은 125MB 기준 5분정도 소요된다.
열의 갯수가 짧을 수록 더 빨리 올라간다.
필자는 열의 갯수가 20개 정도 행의 갯수가 많게는 100만개 적게는 80만개정도 되는 데이터 양이다.
HTML
<form action="처리페이지.php" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><input type="file" name="upfile"></td>
<td><input type="submit" value="업로드"></td>
</tr>
</table>
</form>
처리 페이지
error_reporting(E_ALL);
ini_set('memory_limit',-1); // 엑셀 가져오다가 뻗을 수 있으므로 메모리는 무한대로~
set_time_limit(0);
$UpFile = $_FILES["upfile"];
$UpFileName = $UpFile["name"];
$UpFilePathInfo = pathinfo($UpFileName);
// 파일 확장자
$UpFileExt = strtolower($UpFilePathInfo["extension"]);
//파일 확장자 체크
if($UpFileExt != "csv"){
echo "<script>alert('csv형식의 데이터만 업로드 가능합니다.'); history.back();</script>";
}
$upfile_path = "경로/".$UpFileName;
//temp에 임시 파일이 있는지 체크
if(is_uploaded_file($UpFile["tmp_name"])) {
//파일 업로드
$result = move_uploaded_file($UpFile["tmp_name"], $upfile_path);
//없을 경우 오류 출력
if(!$result){
echo "업로드된 파일을 옮기는 중 에러가 발생했습니다.";
exit;
}
}
//한글 깨짐 방지
setlocale(LC_CTYPE, 'ko_KR.eucKR');
$row = 1;
if(($handle = fopen($upfile_path, "r")) !== FALSE) {
//행의 갯수 만큼 while fgetcsv로 최대 출력 글자 체크
while (($data = fgetcsv($handle, 1000000, ",")) !== FALSE) {
//열의 갯수가 몇개인지 체크
$num = count($data);
//열 첫번째는 제외 (주로 구분 쪽 제거)
if($row==1){
$row++;
}else{
$val = array();
//열을 배열로 쪼개서 인코딩에 맞게 변환 후 $val에 삽입
for ($c=0; $c < $num; $c++) {
$val[] = iconv("euc-kr","utf-8", $data[$c]);
}
echo $val[0];
}
}
}
'PHP' 카테고리의 다른 글
[PHP] $_SERVER[''] 정리 (0) | 2017.11.27 |
---|---|
[PHP] mySql 연결하기 (0) | 2017.11.27 |
[PHP] 이중 배열 정렬하는 방법 (0) | 2017.11.27 |
[PHP] 오늘 날짜가 이번년도의 몇주차인지 계산하기 (0) | 2017.11.27 |
[PHP] PHPMailer를 이용하여 메일 전송하기 (0) | 2017.11.27 |