2016-10-03 2 views
0

저는 현재 개발중인 웹 앱에 조금 갇혀 있습니다. 나는 에 try/catch-blocks과 함께 예외를 더 신중히 사용하기로 결정했습니다.PHP5.6 서버에서 예외가 발견되지 않았습니다.

그럼에도 불구하고; 나는 을 로컬로 PHP7을 사용하여 개발했으며, 방금 PHP5 서버에 앱을 업로드했을 때이 예외가 더 이상 잡히지 않습니다. 대신 스크립트 실행이 치명적인 오류로 중지됩니다. 필자는 PHP7의 예외와 관련된 주요 변경 사항에 대해 읽었지만 필자가 찾은 모든 정보는 매우 모호합니다.

Script-stop은 그리 문제가되지 않지만이 경우 스크립트를 AJAX 호출로 실행하고 JSON 형식의 오류 메시지를 반환해야하기 때문에 오류를 포착하고 "수정하는"것이 매우 중요합니다.

홈페이지 파일 :

throw new Exception(_('My error message.')); 

도움말 :

try { 

    if (!$this->validateNonce($this->postParams['upload-nonce'])) 
    throw new Exception('Upload failed because nonce could not be verified.'); 

    new FloImage(
     $this->postParams['basename'], 
     true, 
     $this->fileParams['uploadfile'] 
    ); 

} catch (Throwable $e) { 

    echo json_encode(array('error' => $e->getMessage())); 
    die(); 

} 

FloImage() 검사 몇 가지 정보 (이름, 파일 크기 등) 및 오류의 경우는 예외 이런 식으로 던졌습니다 PHP5와 함께 try-catch-block 작업을 수행하는 방법에 대해 감사드립니다! 미리 감사드립니다 ...

+0

어떤 치명적인 오류가 발생합니까? –

+0

나는 항상 내가 던지고있는 오류를 얻는다. 치명적인 오류 : 내 메시지. –

+0

'Throwable'은 PHP7의 기본 인터페이스입니다 -> [docs] (http://php.net/manual/en/class.throwable.php) '예외'가 구현되지 않았기 때문에 잡을 수 없다고 생각합니다. PHP5의 인터페이스 –

답변

1

Throwable은 PHP7에서 도입 된 인터페이스입니다. manual에서 그 상태 :

Throwable is the base interface for any object that can be thrown via a throw statement in PHP 7, including Error and Exception.

을 따라서 당신이 Exception 자체를 잡을 필요가 PHP5와 코드를 사용하려는 경우. 나는.

try { 
    throw new Exception('Some exception'); 
} 
catch (\Exception $e) // use the backslash to comply with namespaces 
{ 
    echo($e->getMessage()); 
    die(); 
} 

throw 된 예외가 Exception에서 파생 된 한 계속 작동합니다. 즉

class SpecialException extends Exception {} 

try { 
    throw new SpecialException('Some exception'); 
} 
catch (\Exception $e) // use the backslash to comply with namespaces 
{ 
    echo($e->getMessage()); 
    die(); 
} 
0

사용자 정의 오류 처리기 기능을 작성하는 데 사용되는 을 찾고 계시는 지 모르겠습니다. 따라서 스크립트 실행의 맨 위에 오류 처리기를 설정하십시오.

이전 오류 처리기 기능을 복원하려면 스크립트 끝에 restore_error_handler()을 입력하는 것을 잊지 마십시오.

따라서 set_error_handler() 함수에서 스크립트를 복구 할 수 있습니다.

+0

오류 처리기가 아닌 try/catch를 사용하고 싶습니다.어쨌든 귀하의 제안에 감사드립니다! –

관련 문제