Extra Form
PHP PHP 8.2
CMS Rhymix 2.0

 

something 모듈(1.0.10) 을 연동한 소셜 테마를 만들어보려고 합니다.

로컬환경에서 설치후 설정하려고 하니 아래와 같은 에러가 납니다.

 

에러메세지:

-------------

서버 오류

TypeError #0 "in_array(): Argument #2 ($haystack) must be of type array, string given" in modules/something/tpl/config.html on line 137

common/framework/debug.php:681

-------------

 

이렇게 나오는데 저기 config.html 들어가서 아무리 봐도 어디를 수정해야는지 감이 오질 않습니다.

로컬개발 환경은 라이믹스 2.0.24 / 아파치 2.4.54 / PHP 8.2 입니다.

 

꼭 필요한 모듈인데 혹시 이걸 어떻게 수정해야는지 아시는 분 도와주세요!

 

감사합니다.

 

 

 

 

  • profile
    PHP 버전과 안 맞는게 아닐까 싶습니다만... 버전 높다고 무조건 다 좋은건 아닌듯
  • profile profile
    네 답변 감사합니다. 일단 PHP 7.4에서 동작하는걸 확인했습니다.
  • profile profile
    그렇다고 낮은 버전을 고수하는것도 좋은건 아닙니다.

    PHP버전이 높아지면서 위와 같이 에러가 발생되는 근본적인 원인은 문법대로 코딩을 하지 않았다는 증거이기도 합니다.

    위와 같이 in_array이라는 함수에 배열이 들어가야할 자리인데 문자열을 집어넣어지거나 아니면 데이터 자체가 없다거나 그런경우 해당 데이터를 확인할 수 있는 is_array 함수를 함께 써서 채크해야하는 문제는 예전부터 warning으로 PHP가 알려줬기에 그것을 유지보수 안한.. 저희개발자들의 책임인거죠..ㅠ

    사용자들의 제보가 많고 이러한 오류신고들이 많이 발생되도록 PHP버전을 강제적으로 올려서 RX 서드파티 모듈의 코드 퀄리티가 올라간다면 그것만큼 더 좋은건 없다고 생각이 듭니다.
  • profile profile
    그것도 맞는 말씀이긴 합니다. 낮은 버전은 얼른 탈피하는게 좋죠^^
    다만, 낮은 버전 고수가 아닌 최적화된 버전을 사용하는게 일반 사용자 입장에서 권장할 일이라는 뜻이었습니다.
    개발하신 분들이 하루를 투자해서 되는 일이라면 일반 사용자들은 수백,, 수천명이 똑같은 코드 가지고 몇날몇일을 밤을 지새며 끙끙 거려야 겨우 오류 하나 잡을까말까 하는 가성비 최악인 일이 허다할테니까요
  • profile profile
    맞는 말씀과 좋은 모듈 개발해주셔서 감사합니다! 애착이 가는 모듈이라서 지속적인 개발 응원하겠습니다!
  • profile profile
    공감합니다!
  • profile profile
    사용자들에겐 죄송스럽지만 최소 버전을 빠르게 올리는게 라이믹스가 사실 더 좋아지는 길이긴 합니다. 단기적으로 봤을때 현재 낮은 버전을 유지 해야하긴 하지먼 앞으로 dev버전 이후 2.1버전부터는 php 7.2.5버전 이하라명 라이믹스를 실행하지 못하게 하고 잇어요. 앞으로는 이런경우가 더 많아질 수 잇고요..

    몇달안에 라이믹스 업데이트가 된다면 이 글의 질문글과 같은 오류는 기본 디폴트가 될 수 잇을거에요 ㅠ

    그래도 저희가 이렇게 감행 하는 이유는 서드파티 개발자들이 생산해내는 코드들의 퀄리티도 높일 수 잇고 라이믹스에서 최신공정에서 사용할 수 잇는 다양한 php기믹으로 더 빨라지거나 안정화가 쉽기때문이에요 ㅠㅠ
  • profile profile

    어느 파일의 어느 부분을 이렇게 바꿔보세요, 라고 서로 댓글을 주고받을 수 있는 상태여야 가능한 얘기지요.

    소스가 공개되어 있지 않거나, 공개되어 있더라도 github처럼 소스를 직접 볼 수 있는 곳에 올라가 있지 않고 커뮤니티에서 zip으로 배포했거나, 자기 홈페이지에서 배포하다가 운영을 중단했거나, 심지어 여러 사람이 수정한 버전이 난무하는 모듈이라면 뭘 어떻게 수정해 보자고 제안하기조차 힘듭니다.

    댓글 하나 달자고 어디 구석에 처박혀 있는 zip 파일을 구해서, 질문자분이 사용하는 것과 같은 버전인지 확인하는 과정을 거칠 사람은 많지 않으니까요. 원작자가 유지보수하지도 않고, 커뮤니티에서 쉽게 유지보수할 수 있도록 준비해 두지도 않은 자료는 결국 구버전 사용자의 전유물로 남을 수밖에 없죠.

  • profile

    config.html 파일의 137행 '부근'에
    in_array() 함수가 사용되는데 거기에 들어간 변수가 배열변수가 아니라 문자열이 전달되고 있다는 의미인 것 같습니다.

    버전이 올라갈수록 빡빡하게 체크한다죠.
    in_array 함수를 실행하기 전에 거기에 전달되는 변수를 is_array 등으로 체크하고 아니라면 array 타입으로 바꿔준다든가,
    아예 config.html을 템플릿으로 컴파일하는 php 파일(아마도 something.admin.view.php?)의 해당 action에서 문제가 되는 변수를 반드시 배열로 넘겨준다든가 하면 되지 않을까요?

  • profile profile
    답변 감사합니다. 8.2에서 다시 확인 해보겠습니다.
  • profile
    해결방법 기록 남겨요: https://xetown.com/tips/1785303