CI 묻고 답하기

제목 ci에서 file_get_contents 함수를 사용할려면...
카테고리 CI 2, 3
글쓴이 정수리 작성시각 2016/09/23 17:33:07
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 22379   RSS

htdocs에 있는 test.php에서

 

application/controller의

test_c.php에 

 

배열데이터를 보내려고 합니다.

 

file_get_contents함수 사용하여 

$result = file_get_contents('localhost/index.php/test_c?data='.urlencode(json_encode($array)));

이렇게 해주었지만 에러가 발생하네요;

 

그래서 구글링과 phpschool를 통해서 해답을 얻을려고 했지만 얻지 못해서 포럼에 글을 올리게 되었습니다.

 

포럼에서 찾아보니 file_get_contents 함수 사용에 대해 질문글이 있더라구요 

http://codeigniter-kr.org/bbs/view/qna?idx=9056&page=4&view_category=&lists_style=

 

여기서 봐보니 답변은 너무 간단하고 답변의 url를 통해 들어가보니 404에러가출력이 되기에

 

메뉴얼의 뷰부분에서 맨하단을 보니 

 

뷰를 데이터처럼 리턴받기

세번째 파라미터(옵션) 를 사용하면 뷰를 브라우저로 전송하는대신 데이터로써 리턴하게됩니다. 뷰를 데이터로 처리해야할경우 유용하겠죠 . 아래와같이 3번째 파라미터를 true(boolean)로 설정하면 됩니다.기본값은 false 이며 이때 는 데이터를 브라우저로 전송하게 됩니다. 데이터로 리턴받을때는 변수에 할당해야한다는걸 잊지마세요 .:

$string = $this->load->view('myfile', '', true);

 

이렇게 설명이 되어있는데 너무 간단하게 되어 있어 이해가 어렵네요;;

 

test.php에서 어떻게 url경로를해줘야 하며 

 

데이터를 받는 test_c.php에서는 어떻게 해야 데이터를 받을수 있는 건가요?

 

 다음글 Codeigniter에 트랜잭션 관련 질문입니다. (3)
 이전글 CI 이메일이 어느곳은 되고 어느곳은 안보내집니다. (5)

댓글

천재작곡가 / 2016/09/23 17:55:19 / 추천 0

차라리 curl을 이용하시는게 편할것같은데 어떠신지..

 

$result = file_get_contents('localhost/index.php/test_c?data='.urlencode(json_encode($array)));

요거는 localhost/index.php/test_c?data='.urlencode(json_encode($array)  이 URL에 접속했을때

나오는 내용을 $result로 받으시겠다는건데

file_get_contents 가 php 설정에서 막혀있는 경우도 있으니깐

curl 을 사용하셔서 가져오시는것도 나쁘지 않을것같아요

간단한 예제 남깁니다.

 

//GET 방식
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "localhost/index.php/test_c?data='.urlencode(json_encode($array)"); // URL
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, FALSE);  // POST로 보낼경우
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
$result= curl_exec($ch);
curl_close($ch);

 

// POST 방식
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "localhost/index.php/test_c?data='.urlencode(json_encode($array)"); // URL
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, TRUE);  // POST로 보낼경우
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_POSTFIELDS, 'data='.json_encode($array)); // 메시지
$result= curl_exec($ch);
curl_close($ch);

 

정수리 / 2016/09/26 09:41:16 / 추천 0

@천재작곡가

답변 정말 감사합니다

현재 만들려고 하는 기능이

기존의 인트라넷의 전화접수대장에서 등록을 하였을 때 제가 현재 만들고 있는 프로젝트에서도 전화접수대장에서 등록된 데이터가 출력이 되도록하며 수정과 삭제가 모두 가능하도록 만들어야 합니다.

기존의 인트라넷의 테이블의 경우 기관명이나 문의프로그램의 경우 데이터를 등록을 할때 문자열 그대로 등록하지만 제가 만들고 있는 프로젝트의 경우 테이블에 기관명이나 문의프로그램을 등록을 할때(기관테이블, 문의프로그램테이블이 따로 있습니다.) 기관명의 pk값과 문의프로그램의 pk값을 저장하며 출력을 할때 join문을 사용하여 출력하는 형태 입니다. 

결론적으로 두테이블의 형태가 다르기에 기존의 인트라넷에서 등록을 하였을 때 등록되는 데이터들을 배열에 넣어 저의 controller의 함수로 보낼려고 합니다. 

$result = file_get_contents('localhost/index.php/test_c?data='.urlencode(json_encode($array)));

위에서 제가 적어 놓은 코드의 경우 file_get_contets를 통해 배열을 보내주기만 하면되고 $result로 값을 안받아도 되고 그냥 

저url로 데이터만 보내주기만 하면됩니다. 

현재 테스트로 

기존인트라넷
foreach($this->param as $key => $val){
				switch($key){
					case "Tdate" : case "Tuser" : case "Tcom" : case "Tname" : case "Ttime" : case "Tphone" : case "Tmemo_a" : 
						if(isblank($val)){
							echo "<script>alert('등록 실패');history.back(-1);</script>";
							//movepage(getDomain()."TelmemoN/".$target.".html");
							exit;
						}
					case "Tdept" : case "Tdamdang" : case "TPG" : case "Ttype" : case "Tmemo_b" : case "TetcPG" : case "Twrite" : case "Tresult" : case "Treason" : case "Texcept" : case "Twrite_a" : 
						$insertItem[$key] = addslashes($val);
					break;
					case "mode" :
						switch($val){
							case "NY" :
								$target = "listNY";
							break;
							case "SC" :
								$target = "search";
							break;
							default :
								$target = "index";
						}
					break;
				}
			}
	$result = file_get_contents('http://xxx.xx.xx.x/jds/index.php/gigwan_c/test?data='.urlencode(json_encode($insertItem)));

새프로젝트 컨트롤러의 test함수

function test(){
			
		$insertitem =  json_decode($_GET['data']);

		if(empty($insertitem)){

			echo "
					<meta http-equiv='Content-type' content='text/html; charset=utf-8'>
					<script>alert('성공');
					
					</script>";

		}else{

			echo "
					<meta http-equiv='Content-type' content='text/html; charset=utf-8'>
					<script>alert('실패');
					</script>";

		}

	}

 

이렇게 한후 등록해보았지만 controller의 test 함수의 아무 alert창이 뜨지않네요 ㅜㅜ 

기존 인트라넷의 table에 데이터는 정상적으로 등록이 되구요 그렇다 보니 controller로 데이터가 넘어왔는지 

확인이 불가능 합니다 ㅜㅜ