| 제목 | 에러처리 관련질문드립니다. | ||
|---|---|---|---|
| 글쓴이 | 치혼혈귀 | 작성시각 | 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 를 살짝만져서,  특정 오류발생시, 세션을 생성하고, 컨트롤러에서 그 세션값을 받아 처리하는 식으로 처리하였습니다. 달아주신 댓글방법도 한번씩 해보도록하겠습니다. 관심과, 답변 정말 감사합니다!! |