티스토리 뷰

참고 : http://kohanaframework.org/3.2/guide/kohana/tutorials/error-pages

1. 개발중인지 서비스 진행중인지 구분 하는 상수값 지정하기

내 컴퓨터가 아닐 때는 서비스 중 .. 하든가..

if ($_SERVER['HTTP_HOST'] !== 'localhost')
{
    Kohana::$environment = Kohana::PRODUCTION;
}

혹은

.htacess 파일 내부에 KOHANA_ENV 지정 하기..

# Set environment
# SetEnv KOHANA_ENV 'production'

2.  exception handler 만들기

/application/kohana/exception.php 생성



add(Log::ERROR, parent::text($e));

                $attributes = array(
                    'action'    => 500,
                    'origuri'   => rawurlencode(Arr::get($_SERVER, 'REQUEST_URI')),
                    'message'   => rawurlencode($e->getMessage())
                );

                if ($e instanceof HTTP_Exception)
                {
                    $attributes['action'] = $e->getCode();
                }

                // Error sub-request.
                echo Request::factory(Route::get('error')->uri($attributes))
                ->execute()
                ->send_headers()
                ->body();
            }
            catch (Exception $e)
            {
                // Clean the output buffer if one exists
                ob_get_level() and ob_clean();
                // Display the exception text
                echo parent::text($e);
                // Exit with an error status
                exit(1);
            }
		}
	}
}


3.  Router 설정하기

bootstrap.php 내부에



/**
 * Error router
 */
Route::set('error', 'errors///', array('action' => '[0-9]++', 'origuri' => '.+', 'message' => '.+'))
->defaults(array(
    'controller' => 'errors',
	'action'	 => 'index'
));


4.  Errors 컨트롤러 생성
request->is_initial())
		{
			if ($message = rawurldecode($this->request->param('message')))
			{
				$this->_message = $message;
			}

			if ($requested_page = rawurldecode($this->request->param('origuri')))
			{
				$this->_requested_page = $requested_page;
			}
		}
		else
		{
			// This one was directly requested, don't allow
			$this->request->action(404);

			// Set the requested page accordingly
			$this->_requested_page = Arr::get($_SERVER, 'REQUEST_URI');
		}

		$this->response->status((int) $this->request->action());
	}

	/**
	 * Serves HTTP 404 error page
	 */
	public function action_404()
	{
		$this->template->description = 'The requested page not found';
		$this->template->keywords = 'not found, 404';
		$this->template->title = 'Page not found';

		$this->template->content = View::factory('errors/404')
			->set('error_message', $this->_message)
			->set('requested_page', $this->_requested_page);
	}

	/**
	 * Serves HTTP 500 error page
	 */
	public function action_500()
	{
		$this->template->description = 'Internal server error occured';
		$this->template->keywords = 'server error, 500, internal error, error';
		$this->template->title = 'Internal server error occured';

		$this->template->content = View::factory('errors/500');
	}

}

'웹개발 > Php' 카테고리의 다른 글

Kohana Request  (0) 2011.08.26
Kohana 3.2 Config 얻기..  (0) 2011.08.24
PHP 비트 연산자 사용.  (0) 2011.07.17
HTTP 1.1의 Content Length와 Transfer Encoding  (0) 2011.07.11
PHP 알려지지 않은 트릭 몇가지  (0) 2011.06.30
댓글
댓글쓰기 폼