@ 로 에러를 감춘 많은 코드들 처리 방법
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.2 |
php8에서 치명적인 오류로 이어질 현재 워닝에러를 잡는 작업 중에 어제 @의 기능에 대해 알게 되었습니다.
@로 우선 에러를 감출 수 있는 것이라는 걸 알았는데요.
이게 향후 치명적인 에러로 바뀌는 워닝을 모두 감추고 있는게 문제가 되어 버리는 상황이 되어버리더군요.
라이믹스 코어에서도 꽤 많이 쓰였을 것 같습니다.
일단 서드파티(레이아웃,보드스킨, 이외 모든 모듈의 모든 스킨)에서 광범위하게 쓰였더군요.
라이믹스 autoload.php 파일에
ini_set('scream.enabled', true);
를 추가해 보았는데 에러가 가려진게 나타나지는 않더군요.
php 확장모듈이 설치되어 있지 않아서 그런걸까요??
이거 처리하는 방법이 @in_array 등을 모두 찾아서 @를 제거하고 에러를 확인해서 조치하는 것 외 다른 좋은 방법이 없는 걸까요??
댓글 13
https://3v4l.org/MnvfT
대신 위와 같은 방식으로 PHP 오류 처리기를 바꿔서 강제로 오류가 뜨게 할수는 있습니다.
https://github.com/rhymix/rhymix/blob/3d774510124961492eb00cf61f44608d3dc800b9/common/framework/debug.php#L301
이 부분중 & error_reporting() 부분만 & 3으로 변경하시면 @로 된 부분에서 뜨는 오류/경고도 확인 가능하실겁니다.
if (!($errno & (E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED)))
이렇게 수정하셔도 됩니다.
의아한게 서드파티 모듈 중의 에러를 하나 골라봤는데 @로 가린것은 보이지 않은데 이게 다른 곳에 영향으로 지목된건지...
if ($url_info['host'] && $url_info['host'] != $_SERVER[HTTP_HOST]) return null;
Warning: Use of undefined constant HTTP_HOST - assumed 'HTTP_HOST' (this will throw an Error in a future version of PHP)
에러는 위와 같이 떴습니다. 저 코드에 에러를 가려주는 코드가 @ 말고 또 있는 건가요?
보통? 원하지 않는 입력값이 들어와서 오류를 내보낼 것 같을 때, 오류를 무시하는 용도로 사용하니까요.
일단 지금 발생한 오류부터 수정하셔야 할 것 같네요.
$_SERVER[HTTP_HOST] => $_SERVER['HTTP_HOST']
index.php 파일을
$debug = function(){
// CODE
};
$debug() or die(json_encode(error_get_last()));
로 감싸는겁니다.
---
에러 핸들러를 바꾸는 방법이 있었군요...
@ 가 연산자 취급이라 핸들러에서 처리가 안될줄 알았는데 아니었나봅니다...^^
코어에서부터 고쳐져야 할 것이 너무 많은 것 같아서(2.0에서는 이미 고쳐졌을 겁니다.) 일단 스킨에서 @를 지우고 확인해 보는 것을 먼저하고 나중에 코어 업데이트 후 다시 시도해봐야 할 것 같습니다. 에러가 너무 많이 떠서 에러를 띄우고 하기에는 너무 어렵네요.