Extra Form
PHP PHP 8.1
CMS Rhymix 2.0

PHP 7.4가 올해를 마지막으로 지원이 종료된다고 해서... (7.4 버전이 7.x 버전대의 마지막 버전이라네요)

 

오랜만에 날 잡아서 PHP 8.1로 업그레이드를 했는데요.

Fatal 에러들을 얼추 잡고 난 후 디버깅을 돌려보니 7.4에서는 보이지 않았던 워닝들이 무수히 쌓여 있더군요.

 

워닝들은 주로 서드파티 레이아웃이나 스킨, 모듈에서 나왔고, 거의 대부분이 아래와 같았습니다.

 

>Warning: Undefined property: stdClass::$변수이름

 

코드를 열어서 해당 변수가 있는 부분에서 isset() 등을 감싸주거나 조건을 걸어주면 없어지긴 하던데요.

if (isset($변수이름) && $변수이름) { ... }

 

이런 식으로 해서 지금은 대부분 워닝을 잡긴 했는데 (페이지당 15개 내외)

혹시 더 필요한 부분이나 놓친 부분이 있을까 해서 질문드려 봅니다. (업그레이드 후 체크해야 할 부분 등)

 

P.S. 에러 잡는 데 참고한 글입니다.

https://xetown.com/tips/1489364

https://xetown.com/questions/1493473

  • profile

    사실 undefined 변수를 쓰는 것 자체가 말도 안되는 것이지만, php가 그동안 허용하다보니 코드들이 엉망이 되었더라구요.

     

    초기에 변수를 선언하는 것이 좋지만, 그럴수 없는 상황이라면 (3rd party, 혹은 손 닿지 않는 부분), 쓰는 쪽에서 아쉬운대로 땜빵하는 수밖에... 코드를 다 찾아가면서 필터링하는 것도 방법이지만, 코드 제일 위쪽(또는 모듈의 php에서) 걸러주는 것이 더 좋을때도 많습니다. 집에 들어온 도둑을 방방마다 문 열어보며 잡을 것인지, 아니면 현관문에서 신분증 검사를 할 것인지의 선택인 셈입니다.

     

    초기 변수 선언할때, $var = new stdClass(); 로 해야하는 경우에는 조심해야 하는데, 간혹 황당하게 if ($var) 처럼 쓰는 경우가 있는데, 이런 경우에는 변수를 선언함으로써 if문이 false에서 true로 바뀌므로, if 문도 같이 바꿔줘야하죠.

     

    그리고, 개발자가 방치한 코드중에 재배포가 허용된 것이라면, 본인이 고친것을 포함해서 재배포 해서 다른 사람들이 혜택을 받게 하는 것이 오픈소스의 취지이고 매너겠죠? ^^

  • profile ?
    답변 감사합니다. 알려주신 부분 한번 다시 확인해 보겠습니다. 그리고 말씀해주신 대로 오픈소스 자료도 좀 더 확인해보고 8.1에서 잘 작동하면 타운에 공유해볼게요.
  • profile

    저는 엄두가 안나서 php 업그레이드 못하고 있습니다.
    팁을 보고 부분적으로 혼자 해결해보려고 끙끙 몇일 해보다가
    에잇. 하고는 7.4로 다시 되돌렸습니다
    우분투도 다음 LTS버전은 기본으로 PHP 8.1을 사용한다고 하더라구요.

    시대가 너무 빨리 바뀌는것 같고. 거기에 제가 따라가지 못하는것 같아 걱정이네요.

  • profile ?
    저도 1년 전에 8.0 호기심에 한번 올렸다가 에러들이 미쳐 날뛰는 걸 보고 포기했었는데, 결국은 이번에 어떻게든 올리게 되었습니다.

    운영중인 사이트마다 다를 수는 있는데, 저희 같은 경우는 서드파티 자료를 많이 사용하지는 않아서 8.1로 올리는 데 크게 어렵지는 않았는데 서드파티 자료를 많이 사용하신다면 일일이 다 고치는 게 힘들 것 같긴 합니다. 고친 것 같아도 중간중간 숨어있는 에러들이 꽤 있더라고요...

    그래도 흔히 발생하는 에러들은 겹치는 경우가 많았는데 (stdClass 변수 미선언, count 함수 null, in_array, 0으로 나누는 경우 등) 이 부분만 특히 주의하고 신경쓴다면 큰 문제는 없을 것 같습니다. 물론 구조가 많이 복잡한 자료라면 이야기가 달라지겠지만요.