개발 Q&A

제목 php(ci)에서 json 파일로 파싱하는 방법 궁금합니다.
글쓴이 beop 작성시각 2016/04/12 13:47:03
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 12918   RSS

안녕하세요. 질문좀 드리겠습니다.

 

json 형식의 파일을 txt 파일로 전달 받았습니다.

클라이언트가 직업 매주 ftp에 접속을하여 txt(json)파일을 업데이트 해주는 형식으로 

개발을 해야되는데요..ㅎㅎ

이런경우는 첨이라서요.

 

CI로 개발할 것인데

보통 DB에서 로드한 배열값을 json_encode 하여 사용한적은 있는데,

저 txt(json)파일을 컨트롤러단에서 직접 로드하는 방법이 궁금합니다.

 

컨트롤러

public function index(){  

  $json_string = file_get_contents(base_url('/uploads/test.json'));

  $data['jdata'] = json_decode($json_string, true);

  $this->load->view('main_v',$data);    

}    

뷰 페이지

<?php var_dump($jdata) ?>

에러뜨네요.. 용량이 커서그런가요,,ㅠㅠ

 

추가질문으로

전달 받은 json 파일은 상품리스트 같은 것으로 카테고리, 상품설명, 가격 등등입니다. 용량은 20메가바이트가 넘습니다. 

이 파일은 1~2주에 한번씩 업데이트가 됩니다. 프론트단에서 카테고리별로 분류도 해야되고 내용이 많습니다.

이런경우 json 파일이 업데이트 될때 저희 내부에 DB에 한번 업로드후 DB를 사용하는것이 일반적인지 아니면 DB 이용없이 매번 저 json파일을 읽어서 개발하는 것인지 일반적인지 처음이라 감이 안잡힙니다.

주로 작업하는것인지 궁금합니다. (일 평균 방문자는 20~30명 내외라고 가정합니다,)

 

감사합니다.

 

 다음글 MySQL, Auto_INCREMENT 사용 시 질문입... (3)
 이전글 XAMPP 설치 후phpMyAdmin 실행 시 impo... (14)

댓글

변종원(웅파) / 2016/04/12 14:31:56 / 추천 1

20메가 파일이면 메모리 에러 뜰겁니다. 메모리 제한 해제하시거나 충분히 크게 늘려주세요. ini_set() 함수 쓰시면 됩니다.

계속 쓰는 것이거나 다른 데이터와 join 또는 검색하는 것이면 db에 넣으셔야하고

이용 빈도가 작더라도 파싱시간이 좀 걸리는 거라 한번만 읽어서 사용하는 방식으로 하시는게 좋을 것 같네요.

/ 2016/04/12 14:36:02 / 추천 1

추가 질문 답변 )

json 형식의 파일을 db에 넣는게 일반적일거 같습니다. 이유는 상품설명 카테고리 등등 검색을 해서 보여줘야할 경우가 있을거 같은데

json 형식을 매번 파일로 읽어서 php단에서 처리하면 리소스 낭비라고 생각됩니다.

beop / 2016/04/12 14:46:26 / 추천 0
@웅파 @닉 님 답변 남주셔서 감사합니다. 
ini_set("memory_limit", "-1"); 잘되네요.
beop / 2016/04/12 14:47:38 / 추천 0
또 궁금한 것이 클릭을 하였을때 DB를 갱신하려고하는데 20mb 넘는 파일이 처리가 될까요..?  
kaido / 2016/04/12 16:41:24 / 추천 0

프로그램 하나 짜시면 됩니다.

용량 큰 파일이 문제가 생기는 이유는 중간에 휴식이 없어서 그렇습니다.

[beop님도 쉬지않고 어마무지하게 많은 일을 처리 하라고 해봐요!!]

적당히 sleep  재워가면서 휴식시간을 주면 처리 가능 합니다.

beop / 2016/04/12 17:07:07 / 추천 0
@kaido 아하 sleep을 쓰는게 맞나보군요!! 그렇게 쓰고 있었긴한데 이게 일반적으로 쓰는 방식인가 싶어서 혼돈스러웠습니다. 답변 감사합니다~
차카다이 / 2016/04/13 08:50:45 / 추천 0

@beop 항공 데이타 파싱하는데 curl로 받는데 85메가네요 ..

sleep없이 job queue시스템으로 24시간 돌아가요 .. 

리얼서버 4코어 8쓰레드 16G memory os centos요 ...