PHP 오류 처리 — Basics
PHP 오류 처리 — Basics (기초)
PHP는 다양한 내부 오류 조건에 응답하여 오류(error) 를 보고해요. 이 오류들은 서로 다른 여러 조건을 알려 주는 데 쓰이는데, 필요에 따라 화면에 표시하거나 로그로 남길 수 있어요.
PHP가 만들어 내는 모든 오류에는 타입(type) 이 붙어 있어요. 어떤 오류 타입들이 있는지는 오류 타입 목록에서 확인할 수 있고요, 각각이 어떻게 동작하는지 그리고 어떤 상황에서 발생하는지에 대한 짧은 설명도 함께 정리되어 있어요.
PHP로 오류 다루기
혹시 오류 처리기(handler)가 설정되어 있지 않다면, PHP가 발생한 오류들을 설정(configuration) 에 따라서 스스로 처리해요. 어떤 오류를 보고하고 어떤 오류를 무시할지는 php.ini 지시자 error_reporting이 결정하고, 런타임에서는 error_reporting() 함수 호출로도 제어할 수 있어요. 다만 스크립트 실행이 시작되기 전에 발생할 수 있는 오류도 있기 때문에, 설정 파일 쪽 지시자를 꼭 지정해 두는 걸 강력히 권장해요.
개발 환경에서는 항상 error_reporting을 E_ALL 로 설정해야 해요. PHP가 알려 주는 문제들을 놓치지 않고 모두 인지해서 고쳐야 하기 때문이죠. 운영 환경에서는 E_ALL & ~E_NOTICE & ~E_DEPRECATED처럼 좀 더 조용한 수준으로 줄이고 싶을 수도 있어요. 하지만 사실 대부분의 경우 E_ALL 그대로 두는 것도 괜찮아요 — 잠재적인 문제를 조기에 발견하게 해 주거든요.
PHP가 이 오류들을 어떻게 처리하는지는 추가로 두 가지 php.ini 지시자가 결정해요.
display_errors는 오류를 스크립트 출력의 일부로 화면에 보여 줄지를 정해요. 데이터베이스 비밀번호 같은 민감한 정보가 포함될 수 있기 때문에 운영 환경에서는 반드시 꺼 두어야 하고요, 개발 환경에서는 문제를 즉시 확인할 수 있어 켜 두면 유용해요.- 오류를 화면에 표시하는 것 외에도,
log_errors지시자를 켜면 오류를 로그로 남길 수 있어요. 이렇게 하면error_log에 정의된 파일이나 syslog에 모든 오류가 기록되지요. 운영 환경에서 특히 유용한데, 발생한 오류를 로그로 남겨 두고 나중에 그 로그를 바탕으로 리포트를 만들 수 있거든요.
사용자 정의 오류 처리기
PHP 기본 오류 처리가 부족하게 느껴진다면, set_error_handler()로 나만의 오류 처리기를 설치해서 여러 종류의 오류를 직접 처리할 수도 있어요. 이 방식으로 처리할 수 없는 오류 타입도 일부 있지만, 처리할 수 있는 오류는 스크립트가 원하는 방식대로 다룰 수 있어요. 예를 들어 사용자에게 맞춤 오류 페이지를 보여 준 다음, 로그보다 더 직접적인 방식(예: 이메일 발송)으로 보고하도록 만들 수 있죠.
변경 기록 (Changelog)
| 버전 | 설명 |
|---|---|
| 8.5.0 | 치명적 오류(fatal error) — 예를 들어 최대 실행 시간 초과 — 의 오류 메시지에 이제 스택 트레이스(stack trace)가 포함돼요. |