어제 나온 따끈따끈한 PHP 8.0.0-rc3 테스트버전을 사용해서 라이믹스를 돌려보고 있습니다.

PHP 8.0 정식버전은 11월 말에 릴리즈될 예정입니다.

 

메인화면, 게시판, 관리자 화면 등에서 치명적인 오류를 뿜는 부분은 대부분 쉽게 수정이 되네요.

오늘자 라이믹스 develop (2.0.0-beta) 순정버전 기준으로 일단 돌아가는 상태로는 만들어 놓았습니다.

다행히 정의되지 않은 변수나 배열 키에 접근하는 흔한 이슈는 치명적인 오류가 아니고 그냥 워닝이기 때문에

그런 것이 한 페이지에 500개씩 떠도 실제 작동에 영향은 없습니다. 속도가 느려질 뿐...

대부분의 워닝을 잡은 후에야 속도를 비교하는 의미가 있을 것 같네요.

 

그러나 상당수의 서드파티 자료들이 배열이 아닌 것을 count()한다거나

함수 호출시 파라미터를 누락시키거나, 클래스 상속 후 메소드를 다르게 하는 등 치명적인 오류를 발생시키기 때문에

PHP 8.0에서 다양한 서드파티 자료를 사용하려면 상당한 시간과 노력이 필요할 것 같습니다.

라이믹스용 스케치북 게시판도 몇 군데 수정이 필요하더군요.

 

약간 당황했던 부분...

XE에서 오랫동안 사용해 온 XmlParser 클래스가 갑자기 PHP 내장클래스와 충돌하게 되어 버렸습니다. ㄷㄷㄷ
급하게 XeXmlParser로 변경하고, PHP 7.x에서는 XmlParser로 alias 처리했습니다.

대부분 코어 내부적으로만 사용하는 클래스이기 때문에 BaseObject만큼 파급력있는 이슈는 아닐 것 같습니다만

서드파티 자료에서 XmlParser를 호출한다면? (예: content 위젯을 기반으로 만든 다른 위젯이라면?)

 

글쓴이 기진곰

profile
GitHub @kijin 사람을 위한 인터넷 생태계의 발전에 많은 관심을 갖고 있습니다.
우리가 만들어 가는 XE의 새 이름, 라이믹스(Rhymix) 프로젝트에 참여하고 있습니다.
오픈소스 도로명주소 검색서버 및 API Postcodify를 개발, 운영중입니다.
국내외 서버 및 클라우드서버 세팅, 이전, 튜닝해 드립니다.
  • profile

    in_array(변수,배열변수)
    이경구 배열변수 값이 존재 하지 않는 경우 워닝이 뜨던데요. 이경우도 치명적인 오류이죠?

     

    그리고 스킨에서 흔하게 implode() 배열이 아니거나 혹은 배열인데 값이 없을 수 있거나 하나한 상태의 사용도 마찬가지인지..

  • profile profile

    어젯밤에 몇 개 본 것 같은데... 워닝인지 치명적인 오류인지는 기억이 안 나네요.

     

    다시 확인해 보니 in_array()와 implode() 모두 배열이 아닌 것을 넣으면 치명적인 오류(TypeError)가 뜹니다.

    일단 배열을 넣기만 하면 갯수가 0개인지 1개인지 2개 이상인지는 중요하지 않습니다.

  • profile profile

    https://3v4l.org/kBPbk

    https://3v4l.org/IBL7F

    위에서 테스트한 결과가 정확한거죠? 그렇다면 둘다 치명적인 에러라 다 고쳐야 하는거네요. 스킨이나 애드온 등에 꽤 있어서요.

     

    일단은 스킨이나 자료에서 잡을 수 있는 건 다 잡긴 했습니다.

  • profile profile
    네, 기본적으로 예전에 Notice였던 것은 Warning으로 격상되었고, 예전에 Warning이었던 것은 Fatal Error가 되었다고 보시면 되겠습니다. PHP 7.x에서 Warning을 모두 잡은 후에 업그레이드한다면 Fatal Error는 나오지 않겠지요. 그 대신 새로운 Warning이 어마어마하게 뜰 테고요.

    라이믹스 코어도 지난 몇 년간 Warning을 숨기지 않고 작업해온 덕에, 비교적 쉽게 패치할 수 있었습니다.
  • profile
    코어는 금방 수정하겠지만 서드파티들이 문제겠네요.

    그래도 8.0이 공식적으로 돌아가는게 정말 좋네요!
  • profile

    2번째 언급해주신 XmlParser 관련은 저희는 컨텐츠확장위젯을 주력으로 써서 문제가 되겠네요.

     

    comely 위젯도 마찬가지로 사용이 되었네요.

  • profile profile
    PHP 8.0 + 라이믹스 2.0 환경에서 돌아가도록 하려면
    new XmlParser(); 라고 되어 있는 부분을 모두 new XeXmlParser(); 로 변경하시면 됩니다.
    물론 라이믹스 1.x에는 XeXmlParser가 없으므로 미리 변경해 놓을 수는 없습니다.
  • profile profile
    2.0 변경 직전에 바꾸면 된다는거죠???
  • profile profile
    네. 만약 라이믹스 2.0 변경 후에도 당분간 PHP 7.x를 사용하신다면
    변경 후에 바꾸셔도 무방합니다. 해당 클래스명은 PHP 8.x에서만 문제가 되니까요.
  • profile profile

    아.. 쉬운 작업이라 부담은 안되네요. 아니면 라이믹스 버전의 조건문을 사용해도 될 것 같은 생각도 드네요.

     

    XE 계속 유지 하는 분들 php8.0 은 그림의 떡이네요.

     

    라이믹스1 도 위와 같은 문제로 php8 적용이 안되니(지원 안한다고 공지 되었고) XE에 계신 분들 서둘러서 라이믹스 1로 우선 넘어오신 후(php8 대비 벌레 다 잡고)  2.0으로 가시는게 현명합니다.

  • profile
    배열 관련 값이 없어지는 경우 심각한 오류가 발생하는 케이스를 공유해 드리면 이런 경우입니다.

    로그인 회원에게만 적용되는 코드들이 있습니다. 어기서 결과값이 배열로 만들어진 상태
    - 이 배열값을 in_array() 함수를 써서 값이 포함되었는지 확인하는 과정

    이 경우는 in_array 코드가 비회원에게도 꼭 읽혀져야 하는 위치라면 조건 앞에 해당 값이 있는지의 확인을 우선 하도록 하고

    그게 아니라면 배열을 만들어주는 코드,그 결과값을 가지고 in_array() 함수가 실행되는 대상이 정확히 일치하게 조건을 걸어줘야 합니다. 제가 로그인해서 벌레 잡다가 비로그인으로(아이피지정) 해서 둘러보다가 꽤 많이 발견한 벌레입니다.

    implode() 함수도 비슷한 경우도 있겠지만 그것 보다는 변수 자체가 배열인지 확인이 안되는 상황에서 사용된 것들이 문제가 됩니다. 게시판 확장변수의 변수를 그대로 쓰면 문제가 생깁니다. 저는 이 경우 아예 다른 방법으로 바꿨습니다.
  • profile profile

    배열이라고 생각했는데 배열이 아닌 경우, 대부분 3가지 가능성이 있습니다.
    1. 오브젝트
    2. 내용이 있는 문자열이나 숫자 등
    3. NULL, FALSE, 빈 문자열 등 empty로 처리되는 값

    1번과 2번은 좀 까다롭습니다.
    3번의 경우에는 in_array($var, $array?:[]) 이렇게 ?:[] 를 붙여주면 간단하게 해결됩니다.
    값이 없는 경우 빈 배열로 자동 초기화시켜 주니까요.

  • profile
    라이믹스 2.0과 PHP 8.0이 완전체로 나온다면 제대로 날잡고 버그 잡으러 돌아다녀야겠네요 ㅋㅋ

    기대하고 있겠습니다!!
  • profile
    아 그리고 혹시 JIT도 PHP 8.0에서 추가된다고 하던데, 혹시 베타버전에서도 지원이 되는걸까요?

    라이믹스에서도 잘 작동하는지, 그리고 얼추 버그를 잡은 다음 성능향상폭이 궁금하네요 ㅎㅎ
  • profile
    방금 테스트해 보았는데 iis/php8에서도 잘 돌아갑니다. 혹시 다른 에러가 있으면 제보하겠습니다.
  • profile profile
    iis / php8 설치가능한가요???
  • profile profile

    윈도우용 php8은 https://windows.php.net/qa/ 에서 받을 수 있습니다.

    extension을 잘 설정하면 rhymix를 설치할 수 있습니다.

  • profile profile
    아네~~감사합니다.