본문 바로가기
PHP/PHP Advanced

PHP Error 관련

by 진격의 파파 2013. 7. 1.
반응형

 

PHP의 기본적인 오류 처리는 파일이름, 줄, 번호 및 오류를 설명하는 메시지와 함께 브라우저에 오류 내용이 출력됩니다. 그래서 해당부분을 찾아서 오류를 수정하면 됩니다. 하지만 정작 실무에 들어서서 고객사에게 프로그램 납품을 할때 오류가 발생하면, 회사에 대한 신뢰가 많이 떨어집니다. 그래서 오류를 내지 않도록 주의하며, 코딩해야 합니다. 솔직히 저역시 코딩을 하면서 오류를 내지 않기위해 노력은 하지만 그게 말처럼 쉬운 부분은 아니더라구요.

그래서 이번장에서는 PHP 오류 구문에 대해서 조금 알아보겠습니다.

기본예제를 살펴보겠습니다. 만약 아래처럼 "test.txt" 파일이 존재하지 않는데, fopen으로 읽어올 경우

<?php
$file=fopen("test.txt","r");
?>

Warning: fopen(test.txt) [function.fopen]: failed to open stream:
No such file or directory in D:\test\test.php on line 2

// 위 처럼 에러가 발생합니다. 즉, "D" 드라이브에 "test" 폴더에 "test.php" 파일 두 번째 줄에 오류가 있는데 오류내용은 파일을 읽을(찾을) 수 없다 뭐 이런 내용입니다. 그래서 우린 "test.txt" 파일이 존재하는지 여부를 확인해보면 해당 오류를 쉽게 해결할 수 있습니다.

아래 구문은 위처럼 파일이 없을경우 영문으로 "Warning:~~~~~~" 처럼 지져분하게 오류내용을 보여주기 보다는 파일의 존재여부를 미리 검사하여 파일이 없으면 die("파일이 없다") 를 출력하게 됩니다. die 함수는 현재 진행중인 스크립트를 중지하고 메시지를 남길 수 있는 함수 입니다. die(죽다) 말그대로 프로그램을 멈추게 되는 것이죠.

<?php
if(!file_exists("test.txt")) { //파일이 존재하지 않으면
die("파일이 없다");
} else { // 파일이 존재하면
$file=fopen("test.txt","r");
}
?>

// 하지만 모든 내용에 위처럼 하나하나 오류관련 설명을 달아놓으면 코딩도 길어지고 복잡해지게 되겠죠.

그렇기 때문에 이런 것들을 방지하기 위해 사용자가 직접 오류를 핸들링 할수 있는 함수를 만드는 방법에 대해서 아래에서 알아보겠습니다.

기본 구문

error_function(error_level,error_message,error_file,error_line,error_context)

error_level : 오류에 대한 부분을 숫자로 나타냅니다.

error_message : 오류 메시지에 대한 내용을 나타냅니다.

error_file : 선택 사항이며, 오류가 발생한 파일 이름을 지정합니다.

error_line : 선택 사항이며, 오류가 발생한 줄번호를 지정합니다.

error_context : 선택 사항이여, 오류가 발생했을때 그 값과 배열을 포함하는 값을 지정합니다.

기본 사용구문

function customError($errno, $errstr)
{
echo "<b>Error:</b> [$errno] $errstr<br>";
echo "Ending Script";
die();
}

// 위 코드는 오류를 나타내는 간단한 함수 생성 코드입니다.

<?php
//error handler function
function customError($errno, $errstr) {
echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
$file=fopen("test.txt","r");
?>

// 위 코드는 에러 함수를 만들고 적접 적용을 한 구문인데, 기본적으로 php는 "set_error_handler" 라는 에러를 핸들링할 수 있는 함수가 내장되어 있습니다. 변수 $file 에 fopen("test.txt","r") 를 담아서 실행을 하면 아래와 같은 에러구문이 나타납니다.

Error: [2] fopen(test.txt) [function.fopen]: failed to open stream: No such file or directory

오류 관련 함수 생성에 대해서 알아보았습니다. 이 부분은 저도 잘 사용하지 않는 방법이라서 설명드리기가 매우 난감하였습니다. 자세히 설명을 하지 못한점 죄송합니다. ^^;;

더욱더 자세하게 알고 싶으신 분들은 http://php.net/manual/kr/book.errorfunc.php 이곳에 방문하면 더 상세하게 정보가 나와있습니다. 참조하시기 바랍니다.

혹시 설명중 오타나 오류가 있으면 쪽지나 댓글 주시면 바로 수정해 놓겠습니다.

반응형

'PHP > PHP Advanced ' 카테고리의 다른 글

PHP Email 구문  (0) 2013.06.28
PHP Sessions 구문  (0) 2013.06.27
PHP cookies 구문  (0) 2013.06.26
PHP file upload 구문  (2) 2013.06.25
PHP file 처리 함수  (0) 2013.06.24