2009-11-22 7 views
10

치명적인 오류가있을 때 PHP가 보편적으로 특정 페이지로 리디렉션하도록 지시하는 방법이 있습니까?모든 오류 잡기 및 PHP로 페이지로 리디렉션

다른 파일이 많은 사이트가 있는데, 오류를 숨기고 (오류가 계속되는 동안) 문제를 숨기고 오류가 무엇인지 또는 어떤 페이지에 있는지에 관계없이 동일한 오류 페이지로 사용자를 보내려고합니다.

오류를보고 싶지 않으며, 23 번째 또는 51 번째 페이지를 편집 할 때마다 오류가 발생하는 로봇에 의해 페이지가 지속적으로 편집되고 업데이트된다는 주장을하기 쉽습니다.

나는 php.ini 파일 또는 htaccess와 관련이있는 무언가를 찾고 있습니다. 사이트 전체에서 할 수있는 것입니다.

+0

마침내 제대로 작동하게되면 http : // http : //stackoverflow.com/a/19263800/1993494 – relipse

답변

5

당신은 아파치의 기본 500 오류 페이지를 변경할 수 있습니다 'ErrorDocument'지시문 사용 :

ErrorDocument 500 /500.html 

이렇게하면 500 내부 서버 오류가 500.html으로 리디렉션됩니다. PHP 페이지를 사용하여 참조 페이지를 메일로 보낼 수도 있습니다.

오류를 잡으려면 오류 로그 파일에 기록 할 수 있습니다. php.ini 파일에서 다음 두 가지 지시어를 사용하십시오 :

error_log = /var/log/httpd/error_php 
log_errors = On 

Apache를 다시 시작하는 것을 잊지 마십시오.

display_errors=Off 
log_errors=On 
error_log=whatever/path 

register_shutdown_function('errorHandler'); 
function errorHandler() { 
    $err = error_get_last(); 
    if($err) 
    include "error_page.php"; // your custom error page 
} 

이를 넣어 (set_error_handler 달리,이 또한 치명적 상태를 잡는다) 오류 처리기를 작성 :

+4

이것은 PHP 오류에는 작동하지 않습니다. – Cybot

9

set_error_handler 참조 :

set_error_handler - 설정 사용자 정의 오류 핸들러 함수

초보 예 :

<?php 

function errorHandler($n, $m, $f, $l) { 
    header('Location: http://example.com/error.php'); 
} 

set_error_handler('errorHandler'); 
... 
?> 
5

먼저, 오류 메시지를 표시하고 로깅을 활성화하기 위해 php.ini 파일을 변경 파일에 코드를 추가하고 모든 requrest에 PHP가 포함되도록하십시오. (auto_prepend_file @http://php.net/manual/en/ini.core.php)

+0

Ref : http://stackoverflow.com/questions/2171055/register-shutdown-function-registered-function-cannot-include-files-if-terminat 구문 분석 오류가 발생하면이 코드가 작동하지 않습니다. include는 스크립트를 자동으로 실패하게 만들며, 흔적은 거의 남기지 않습니다. 누구나 입력이 있다면, 나는 모두 귀입니다. –

+0

이것은 실제로 나를 위해 일한 대답에 다소 가깝습니다. http://stackoverflow.com/a/19263800/1993494 – relipse