제목 | 용량이 큰 txt 파일을 read 해 배열에 넣어서 db에 insert 하고자 합니다. | ||
---|---|---|---|
글쓴이 | 로드덕 | 작성시각 | 2015/05/26 09:41:57 |
|
|||
질문사항 : de.txt 는 도로명 주소 입니다. (데이터크기가 21메가 정도 됩니다.) 아 처리 했을경우 아래의 이미지와 같은 메세지가 나옵니다. 구글링을 해본결과 메모리 문제 때문이라고 하여 php.ini 파일 설정을 변경하였습니다. memory_limit = 512M 하지만 같은 메세지가 나오는걸로 봐서 다른 분제 인것 같은데... 어느부분을 체크해야할지 어떻게 처리해야할지 조언 부탁드립니다. ps: txt 파일을 fgets을 이용해 전부 읽지 않고 1000줄씩 나누어서 읽을수는 없나요? $i=0; $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen($DOCUMENT_ROOT.'/de.txt','r'); if ($fp) { while (!feof($fp)) { $buffer[$i] = fgets($fp, 1024); $buffer[$i] = iconv("euc-kr","utf-8",$buffer[$i]); echo $buffer[$i].'<br>'; ++$i; } } fclose($fp); |
|||
다음글 | mysql 쿼리 문 질문합니다. (1) | ||
이전글 | header 영역 title에 관힌 질문입니다. (2) | ||
로드덕
/
2015/05/26 10:14:24 /
추천
0
|
변종원(웅파)
/
2015/05/26 10:18:39 /
추천
0
1000건씩 나눠서 읽기만 하는건 현재와 똑같은 메모리를 사용합니다.
21메가를 다 읽어서 메모리에 적재하고 fclose 하기전까지는 날라가지 않습니다. http://php.net/manual/en/function.ini-set.php 이 명령어로 해당 작업에만 메모리제한 없이 작업을 할 수 있습니다. |
한대승(불의회상)
/
2015/05/26 12:22:33 /
추천
0
while 루프안에 DB 관련 로직을 집어 넣으면 배열에 집어 넣지 않고도 처리가 가능 할 텐데...
|
유마
/
2015/05/26 13:45:06 /
추천
0
우편번호 검색은 다음(Daum)걸 이용하는... -_-
|
로드덕
/
2015/05/26 14:15:49 /
추천
0
/웅파 님 ㅜㅜ 시도해 보았으나 실패 ㅜㅜ 같은 메세지가 나오네요 ㅜㅜ
/불의회상 님 배열에 집어 넣지 않고도 처리 가능하다는게 모든 array 값을 2차 배열로 지정후 한번에 insert 하라는 거죠? 방법을 찾아보도록 하겠습니다. 감사합니다. /유마 님 담변은 감사하나... 우편번호 검색이 주 목적이 아니라 대용량 데이터를(엑셀파일이 아닌 txt 파일로(|) 로구분...) ci를 이용해서 import(db에 insert)시키는 구문을 작성해 보고자 하는것 입니다.^^ 기본 베이스가 되는것을 하나 만들어두면 두고 두고 쓸수 있을듯 하여 시도해보는중 입니다. ^^ 신경써주셔서 감사합니다.^^ |
한대승(불의회상)
/
2015/05/26 14:39:48 /
추천
0
너무 어렵게 이야기 했나요?
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen($DOCUMENT_ROOT.'/de.txt','r'); if ($fp) { while (!feof($fp)) { $buffer = fgets($fp, 1024); $buffer = iconv("euc-kr","utf-8",$buffer[$i]); . . $this->db->insert('mytable', $data); } } fclose($fp); |
로드덕
/
2015/05/26 14:50:52 /
추천
0
/불의회상 님 감사합니다. 문제는 해결하였고... txt 파일 용량이 100 메가가 넘어서 insert 되다가 중간에 멈추는 문제까지 발생하였습니다만 구글링의 힘으로 결국 찾았네요... 아래의 소스는 구현된 소스 이구요.. 더 심플하게 바꿀 방법을 생각해봐야겟네요... ^^
function get($id){ $loop=100; $pointer=false; if ($id!='aaa'){ $pointer = $id; } $q=1; $i=0; $a=array(); $buffer=array(); $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; echo 'start'; //$fp = fopen($DOCUMENT_ROOT.'/de.txt','r'); $fp = fopen($DOCUMENT_ROOT.'/seoul.txt','r'); if($pointer){ fseek($fp,$pointer); } if ($fp) { while (!feof($fp)) { $buffer[$i] = fgets($fp, 4096); $buffer[$i] = iconv("euc-kr","utf-8",$buffer[$i]); $a = explode('|',$buffer[$i]); $court_code = $a[0]; $si_do = $a[1]; $si_gun_gu = $a[2]; $court_eup_myeon_dong = $a[3]; $court_ri = $a[4]; $san = $a[5]; $ji_no01 = $a[6]; $ji_no02 = $a[7]; $road_code = $a[8]; $road_name = $a[9]; $basement = $a[10]; $building_no01 = $a[11]; $building_no02 = $a[12]; $building_name01 = $a[13]; $building_name02 = $a[14]; $building_code = $a[15]; $eup_myeon_dong_code = $a[16]; $haengieong_dong_code = $a[17]; $haengieong_dong_name = $a[18]; $post01 = $a[19]; $post02 = $a[20]; $delivery_name = $a[21]; $move_cause_code = $a[22]; $redate = $a[23]; $old_road_name_address = $a[24]; $si_gun_gu_building_name= $a[25]; $apartment_house = $a[26]; $zone_code = $a[27]; $address_more = $a[28]; $etc01 = $a[29]; $etc02 = $a[30]; ++$i; $this->db->insert('address00',array( 'court_code'=>$court_code, 'si_do'=>$si_do, 'si_gun_gu'=>$si_gun_gu, 'court_eup_myeon_dong'=>$court_eup_myeon_dong, 'court_ri'=>$court_ri, 'san'=>$san, 'ji_no01'=>$ji_no01, 'ji_no02'=>$ji_no02, 'road_code'=>$road_code, 'road_name'=>$road_name, 'basement'=>$basement, 'building_no01'=>$building_no01, 'building_no02'=>$building_no02, 'building_name01'=>$building_name01, 'building_name02'=>$building_name02, 'building_code'=>$building_code, 'eup_myeon_dong_code'=>$eup_myeon_dong_code, 'haengieong_dong_code'=>$haengieong_dong_code, 'haengieong_dong_name'=>$haengieong_dong_name, 'post01'=>$post01, 'post02'=>$post02, 'delivery_name'=>$delivery_name, 'move_cause_code'=>$move_cause_code, 'redate'=>$redate, 'old_road_name_address'=>$old_road_name_address, 'si_gun_gu_building_name'=>$si_gun_gu_building_name, 'apartment_house'=>$apartment_house, 'zone_code'=>$zone_code, 'address_more'=>$address_more, 'etc01'=>$etc01, 'etc02'=>$etc02 )); $this->db->insert_id(); if($q ==$loop){ $pointer_here = ftell($fp); $url ='/index.php/topic/address/get/'.$pointer_here; echo '<meta http-equiv="refresh" content="1; url=',$url,'">'; fclose($fp); exit; } ++$q; } } echo '파일처리 완료'; fclose($fp); } |
로드덕
/
2015/05/26 14:52:37 /
추천
0
완성이 되면 소스 정리해서 공유해 보도록 하겠습니다. ...
|
1000건씩 나누어서 처리하는방법만 찾으면 될듯 합니다.