업로드 형식은 무조건 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];
        }
    }
}



+ Recent posts