Extra Form
PHP PHP 7.2
CMS Rhymix

php8에서 치명적인 오류로 이어질 현재 워닝에러를 잡는 작업 중에 어제 @의 기능에 대해 알게 되었습니다.

 

@로 우선 에러를 감출 수 있는 것이라는 걸 알았는데요.

 

이게 향후 치명적인 에러로 바뀌는 워닝을 모두 감추고 있는게 문제가 되어 버리는 상황이 되어버리더군요.

 

 

라이믹스 코어에서도 꽤 많이 쓰였을 것 같습니다. 

 

일단 서드파티(레이아웃,보드스킨, 이외 모든 모듈의 모든 스킨)에서 광범위하게 쓰였더군요.

 

라이믹스 autoload.php 파일에 

ini_set('scream.enabled', true);

 

를 추가해 보았는데 에러가 가려진게 나타나지는 않더군요.

 

php 확장모듈이 설치되어 있지 않아서 그런걸까요??

 

 

 

이거 처리하는 방법이 @in_array 등을 모두 찾아서 @를 제거하고 에러를 확인해서 조치하는 것 외 다른 좋은 방법이 없는 걸까요??

  • profile
    네. scream 확장이 설치되어 있지 않으니 아무 효과 없습니다.

    https://3v4l.org/MnvfT
    대신 위와 같은 방식으로 PHP 오류 처리기를 바꿔서 강제로 오류가 뜨게 할수는 있습니다.
  • profile profile
    어떤 방법이든 에러를 띄워서 찾아내서 처리하는게 현재 최선인거죠?
  • profile profile
    네. 다만 라이믹스는 이미 오류 처리기가 있으니

    https://github.com/rhymix/rhymix/blob/3d774510124961492eb00cf61f44608d3dc800b9/common/framework/debug.php#L301

    이 부분중 & error_reporting() 부분만 & 3으로 변경하시면 @로 된 부분에서 뜨는 오류/경고도 확인 가능하실겁니다.
  • profile profile
    if (!($errno & 3)) 이렇게요???
  • profile profile
    그렇게 하셔도 되고, 기존 라이믹스와 동일하게 수정하시려면

    if (!($errno & (E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED)))
    이렇게 수정하셔도 됩니다.
  • profile profile
    감사합니다. 이제 골뱅도 열심히 잡아봐야겠네요 ㅜㅡ
  • profile profile
    적용해 봤더니 코어에서 벌써 에러들이 뜨네요... 일단 선택적으로 골라서 열심히 스킨에서 나는 것들을 찾아서 조치해 나가봐야 겠네요.
  • profile profile
    적용했더니 많은 에러가 새로 뜨는데요.

    의아한게 서드파티 모듈 중의 에러를 하나 골라봤는데 @로 가린것은 보이지 않은데 이게 다른 곳에 영향으로 지목된건지...

    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)

    에러는 위와 같이 떴습니다. 저 코드에 에러를 가려주는 코드가 @ 말고 또 있는 건가요?
  • profile profile
    @ 가 붙어도 현재 시점에서 코드에 오류가 없다면 오류 발생이 없겠지요.
    보통? 원하지 않는 입력값이 들어와서 오류를 내보낼 것 같을 때, 오류를 무시하는 용도로 사용하니까요.

    일단 지금 발생한 오류부터 수정하셔야 할 것 같네요.

    $_SERVER[HTTP_HOST] => $_SERVER['HTTP_HOST']
  • profile profile
    네. 지금 @ 로 등으로 감춰진 코드가 새롭게 나타난 에러가 아닌거 같아서요. 그 전에 검출이 안되다가 이번에 된게 그냥 우연인건지 궁금했는데요. @가 붙어도 오류가 없으면 당연히 에러가 뜨지 않겠죠.
  • profile
    진짜 꼼수에 꼼수에 꼼수를 덫씌운 방법이라면...

    index.php 파일을

    $debug = function(){
    // CODE
    };
    $debug() or die(json_encode(error_get_last()));

    로 감싸는겁니다.

    ---
    에러 핸들러를 바꾸는 방법이 있었군요...
    @ 가 연산자 취급이라 핸들러에서 처리가 안될줄 알았는데 아니었나봅니다...^^
  • profile profile
    @ 사용시 일시적으로 error_reporting을 0으로 낮추는 것이라서, 오류 처리기에서 error_reporting을 무시하면 @도 무시할수 있습니다.
  • profile

    코어에서부터 고쳐져야 할 것이 너무 많은 것 같아서(2.0에서는 이미 고쳐졌을 겁니다.) 일단 스킨에서 @를 지우고 확인해 보는 것을 먼저하고 나중에 코어 업데이트 후 다시 시도해봐야 할 것 같습니다. 에러가 너무 많이 떠서 에러를 띄우고 하기에는 너무 어렵네요.