제목 | 에러처리 관련질문드립니다. | ||
---|---|---|---|
글쓴이 | 치혼혈귀 | 작성시각 | 2013/07/15 17:37:39 |
|
|||
정규식 관련 php함수은 preg_match 함수를 사용했을때 정규식 형태에 맞지않는 것에 대해 에러처리를 해주려합니다. 하지만 codeigniter 는 try catch 가안되어 에러박스만 뜰뿐 그 에러가 발생했을 시 어떻게 처리해야할지 모르겠네요. 무슨 대안 없을까요? |
|||
태그 | 예외,try catch,에러,처리 | ||
다음글 | 파일업로드가 두개라면, (5) | ||
이전글 | /ci 에 설치할경우 (1) | ||
한대승(불의회상)
/
2013/07/15 18:11:25 /
추천
0
어떻게 했는지 알 수가 없어 도움드리기가 참 힘드네요.
|
치혼혈귀
/
2013/07/16 09:14:27 /
추천
0
아래의 이미지처럼, 고의적으로 잘못된 정규식을 넣었을때 이러한 메시지 박스가 나타나는데 제가원하는것은 이런오류가 나타났을 때, 이런 박스대신에 false, true, 혹은 메시지로 성공,실패 이런식으로 하길 원합니다.
하지만 찾아본바로는 저런 메시지 박스를 error_reporting(0); 로 없앨 수 있긴한데, 제가원하는 메시지를 받질 못합니다. try catch가 안먹어서요. 강제적으로 exception을 던져줘야 되긴한데 아래처럼 자연스러운 구문오류일때가 문제입니다. |
한대승(불의회상)
/
2013/07/16 11:08:42 /
추천
0
이 문제는 CI에서 처리를 못하는게 아니라 PHP가 다른 방식으로 처리 하기 때문입니다.
이렇게 하시면 해결 됩니다. 모든 경고 메시지는 이 함수를 통하게 된다는게 함정.... set_error_handler("warning_handler", E_WARNING); function chk_name($exString) { $test = preg_match($exString, "PHP is the web scripting language of choice."); return $test; } function warning_handler($errno, $errstr) { echo 'Message:' . $errstr; } echo chk_name("//sfsdf//"); |
치혼혈귀
/
2013/07/16 15:03:11 /
추천
0
오 신기하게 진짜로 메시지가 나오네요
적용시켜보고 다른거에 어떤 영향을받을진 아직모르지만 일단 정말 감사드립니다.! 운영진짱짱맨 |
치혼혈귀
/
2013/07/17 10:25:11 /
추천
0
재질문 드리겠습니다 .
위의 답변대로 해보니 일반 php로는 잘되는데, ci의 컨트롤러에서 사용하니 먹히질 않습니다. ci에서는 다른방법이있나요? |
한대승(불의회상)
/
2013/07/17 11:39:55 /
추천
0
ㅎㅎㅎ 항상 소스는 빼 놓는군요.. ^^
|
치혼혈귀
/
2013/07/17 13:04:58 /
추천
0
소스 별다른건 없습니다. 컨트롤러에
ex) 컨트롤러명이 abc 일때 function index(){ set_error_handler("warning_handler", E_WARNING); function chk_name($exString) { $test = preg_match($exString, "PHP is the web scripting language of choice."); return $test; } function warning_handler($errno, $errstr) { echo 'Message:' . $errstr ; } echo chk_name("//PHP//"); }이런식으로 놓고 localhost/abc 로 실행시켰을 때 입니다. |
변종원(웅파)
/
2013/07/17 13:18:42 /
추천
0
ci index.php에 상수 ENVIRONMENT 가 development로 되어 있는가 확인해보세요.
E_WARNING 자체가 막혀있을 수 있습니다. |
치혼혈귀
/
2013/07/17 13:20:56 /
추천
0
development 로설정되어있구요\
define('ENVIRONMENT', 'development'); /* *--------------------------------------------------------------- * ERROR REPORTING *--------------------------------------------------------------- * * Different environments will require different levels of error reporting. * By default development will show errors but testing and live will hide them. */ if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'development': error_reporting(E_ALL); break; case 'testing': case 'production': error_reporting(0); break; default: exit('The application environment is not set correctly.'); } }
production 으로하면 아에오류메시지가 출력안되는데 제가원하는 건 오류(예외)가 발생했을시, 어떠한 값으로 받길 원하거든요 false라던지, "실패" 라는 문자라던지 그걸로인해 예외처리가 났을 때, 일정 동작을 실행하지못하게 하기위한 목적입니다 |
변종원(웅파)
/
2013/07/17 13:57:36 /
추천
0
ci 에러로그 남기는걸 좀 변형해도 될거 같네요.
core에 Exceptions.php라는 라이브러리가 하나 있습니다. 거기서 로그파일로 쓰거나 화면에 출력하는등 제어를 합니다. 그 파일을 확장해서 특정 메세지는 show_php_error()함수처럼 화면에 출력하도록 해주면 될거 같네요. |
치혼혈귀
/
2013/07/17 14:09:02 /
추천
0
음.. 그부분에 대해서는 생각하고 있었긴한데,
컨트롤러 부분으로 특정 값을 Exceptions.php 에서 보낼 수가 있을까요? |
변종원(웅파)
/
2013/07/17 14:23:38 /
추천
0
|
한대승(불의회상)
/
2013/07/17 14:48:21 /
추천
0
ㅎㅎㅎ 소스코드대로 하면 당연히 안되겠죠.. ^^
이렇게 해보세요. 왜 안됐을까요? 아래처럼 하면 왜 될까요? ^^ set_error_handler("warning_handler", E_WARNING); function warning_handler($errno, $errstr) { echo 'Message:' . $errstr ; } class Welcome extends CI_Controller { public function index() { echo $this->chk_name("//PHP//"); $this->load->view('welcome_message'); } function chk_name($exString) { $test = preg_match($exString, "PHP is the web scripting language of choice."); return $test; } } |
치혼혈귀
/
2013/07/17 17:50:24 /
추천
0
일단 제가 처리한 형식은 Exceptions.php 를 살짝만져서,
특정 오류발생시, 세션을 생성하고, 컨트롤러에서 그 세션값을 받아 처리하는 식으로 처리하였습니다. 달아주신 댓글방법도 한번씩 해보도록하겠습니다. 관심과, 답변 정말 감사합니다!! |