| 제목 | 용량이 큰 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건씩 나누어서 처리하는방법만 찾으면 될듯 합니다.