CI 묻고 답하기

제목 메모리부족에러 출력으로 인해 문제되는 부분을 찾는 중 특이한 부분을 찾게 되었습니다.
카테고리 CI 2, 3
글쓴이 정수리 작성시각 2016/10/04 14:18:47
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 15104   RSS

이전에 메모리부족에러 출력으로 글을 올렸었습니다.

여러 포럼선배분들께서 답글을 올려주셔서 감사합니다.

문제되는 부분을 찾고자 확인 하던중 특이점을 발견하여 글을 올리게되었습니다.

 

function pg_dm_modify(){
			$this->output->enable_profiler(TRUE);
			$data = array();
			foreach($this->input->post(null, true) as $key => $val) $data["{$key}"]= $val;
			var_dump($data);
			
			$result = $this->pg_dm_modify($data);
/*
				if($result){
					
					echo "
					<meta http-equiv='Content-type' content='text/html; charset=utf-8'>
					<script>alert('수정되었습니다');
					window.opener.parent.location.reload();
						window.close();
					</script>";
		
				}
	*/			
				clearstatcache();
			
	}

$result부분을 주석처리 하였을 경우 폼으로 데이터를 넘거미녀 var_dump($data)를 통해 넘어온 데이터들이 확인 됩니다.

 

$result의 주석부분을 삭제한 후 실행하면 메모리가 부족하다는 에러가 뜨더라구요

 

function pg_dm_modify($data){
/*
			var_dump($data);
		if(array_key_exists('Texcept',$data)){
			
			  $sql = 'update jds_telmemo set Tdate = ?, Ttime = ?, Tuser =?, Tdept = ?, Tname = ?, Tphone = ?, Tmemo_a = ?, Tmemo_b=?, TetcPG = ?, Tresult = ?, Treason = ?, Tdamdang =?, pg_pk = ?, Ttype = ?, Twrite_a = ?, Twrite = ?, Trctype = ?, TPG = ?, Texcept = ? where Tno =?';

					$result =  $this->db->query($sql, array($data['Tdate'], $data['Ttime'], $data['Tuser'],  $data['Tdept'], $data['Tname'], $data['Tphone'], $data['Tmemo_a'], $data['Tmemo_b'], $data['TetcPG'], $data['Tresult'], $data['Treason'], $data['Tdamdang'], $data['pg_pk'], $data['Ttype'], $data['Twrite_a'], $data['Twrite'], $data['Trctype'], $data['TPG'], $data['Texcept'], $data['Tno']));

			}else{
				
		       $sql = 'update jds_telmemo set Tdate = ?, Ttime = ?, Tuser =?,  Tcom = ?, Tdept = ?, Tname = ?, Tphone = ?, Tmemo_a = ?, Tmemo_b=?, TetcPG = ?, Tresult = ?, Treason = ?, Tdamdang =?, pg_pk = ?, Ttype = ?, Twrite_a = ?, Twrite = ?, Trctype = ?, TPG = ?, Texcept = "" where Tno =?';	
						
					$result =  $this->db->query($sql, array($data['Tdate'], $data['Ttime'], $data['Tuser'], $data['Tcom'], $data['Tdept'], $data['Tname'], $data['Tphone'], $data['Tmemo_a'], $data['Tmemo_b'], $data['TetcPG'], $data['Tresult'], $data['Treason'], $data['Tdamdang'], $data['pg_pk'], $data['Ttype'], $data['Twrite_a'], $data['Twrite'], $data['Trctype'], $data['TPG'], $data['Tno']));

			}

		 return $result;
*/
	}

위의 코드의 경우 컨트롤러에서 데이터를 보낸 데이터를 받는 모델부분입니다.

모델 함수의 안의 if문을 전체를 주석처리 한후 var_dump($data)를통해 넘어온 데이터값을 확인해 보았습니다.

그런데 특이한게 화면에는 var_dump를 통해 데이터값이 확인은 되는데  이 데이터의 경우 하나의 리스트의 데이터만

넘어오는데 화면에 출력되는 데이터의 경우 동일한 값들이 계속 증가하는 것입니다;;

마치 무한 while이 도는것 처럼;;

그렇다보니 이부분이 문제가 되는것 같은데 무엇때문에 이렇게 화면에 확인되는 데이터값이 계속해서 늘어날까요;;

 다음글 회원가입 시 패스워드의 경우 어떻게 저장하시나요? (6)
 이전글 CI 4 모델 로드하기 (2)

댓글

이제다시 / 2016/10/04 14:34:57 / 추천 0

function 안에 자신을 호출하면 재귀함수가 되서 특별히 break 하지 않는 이상 빠져 나올 수 없다고 생각드내요.

controller 의 함수 이름과 model 의 함수 이름이 같으면 

 

$this->모델명->pg_dm_modify($data);

 

위와 같이 호출해야 합니다. 

정수리 / 2016/10/04 15:04:26 / 추천 0

@이제다시

!!해결하였습니다;

왜 중간에 모델명을 빼먹었지 ㅜㅜ 덕분에 해결하였습니다 담부터 좀더 신중해야 겟네요