어드민 "입력 필드 설정"에서 체크박스 타입 필드에 라벨을 2가지 주고, editor.php 화면에서 2가지를 모두 체크하고 서브밋하면 document.php에서 에러가 납니다.
$content에 값은 잘 들어가 있는데 document.php에서 "이 웹사이트에 치명적인 오류가 있습니다." 라는 php 에러가 뜨네요.
콘솔에는 "Failed to load resource: the server responded with a status of 500 ()" 이렇게 되네요.
작업하던 스킨에 문제가 있는 줄 알았는데 기본 스킨으로 설정해도 똑같은 에러가 납니다.
해당 체크박스 필드가 값이 여러개가 되면서 배열형식이 되었는데 읽어올 때는 단순 변수로 읽어오려고 해서 에러가 난 게 아닌가 싶지만
"게시글 본문에 표시"를 체크하지 않아서 본문에서는 읽어올 일이 없어서 뭐때문에 이런 에러가 나는지 모르겠네요.
무엇이 문제인지 알 수 있을까요?
안녕하세요~^^
워드프레스 사이트에서 "이 웹사이트에 치명적인 오류가 있습니다." 문구가 표시된다면
해당 문구만으로는 원인을 파악하기 어렵기 때문에
디버그 모드를 활성화해서 어떤 에러 메시지가 표시되는지 확인해보셔야 할 듯합니다.
디버그 모드 활성화 방법은 아래 링크를 참고 부탁드립니다.
고맙습니다.
php 에러 메세지 출력했더니 이렇게 나오네요.
Fatal error: Uncaught TypeError: unserialize(): Argument #1 ($data) must be of type string, array given in /home/WWW/docroot/wp-content/plugins/kboard/class/KBContentOption.class.php:24
Stack trace:
#0 /home/WWW/docroot/wp-content/plugins/kboard/class/KBContentOption.class.php(24): unserialize()
#1 /home/WWW/docroot/wp-content/plugins/kboard/class/KBoardFields.class.php(709): KBContentOption->__get()
#2 /home/WWW/docroot/wp-content/plugins/kboard/class/KBContent.class.php(1766): KBoardFields->getDocumentValuesHTML()
#3 /home/WWW/docroot/wp-content/plugins/kboard/skin/request-original-text/document.php(97): KBContent->getDocumentOptionsHTML()
#4 /home/WWW/docroot/wp-content/plugins/kboard/class/KBoardSkin.class.php(156): include('...')
#5 /home/WWW/docroot/wp-content/plugins/kboard/class/KBoardBuilder.class.php(554): KBoardSkin->load()
#6 /home/WWW/docroot/wp-content/plugins/kboard/class/KBoardBuilder.class.php(312): KBoardBuilder->builderDocument()
#7 /home/WWW/docroot/wp-content/plugins/kboard/index.php(808): KBoardBuilder->create()
#8 /home/WWW/docroot/wp-content/plugins/kboard/index.php(833): kboard_builder()
#9 /home/WWW/docroot/wp-includes/class-wp-hook.php(303): kboard_auto_builder()
#10 /home/WWW/docroot/wp-includes/plugin.php(189): WP_Hook->apply_filters()
#11 /home/WWW/docroot/wp-includes/post-template.php(253): apply_filters()
#12 /home/WWW/docroot/wp-content/themes/testdir/template-parts/content/content-page.php(7): the_content()
#13 /home/WWW/docroot/wp-includes/template.php(772): require('...')
#14 /home/WWW/docroot/wp-includes/template.php(716): load_template()
#15 /home/WWW/docroot/wp-includes/general-template.php(204): locate_template()
#16 /home/WWW/docroot/wp-content/themes/testdir/page.php(18): get_template_part()
#17 /home/WWW/docroot/wp-includes/template-loader.php(106): include('...')
#18 /home/WWW/docroot/wp-blog-header.php(19): require_once('...')
#19 /home/WWW/docroot/index.php(17): require('...')
#20 {main} thrown in
/home/WWW/docroot/wp-content/plugins/kboard/class/KBContentOption.class.php on line 24
문제가 되는 체크박스의 메타키는 'agreement' 이고 디비에는 잘 입력된 것 같습니다. 저 값이 배열이 아니고 1개일 때는 잘 작동하는데 2개가 되면 에러가 납니다.
[option] => KBContentOption Object
(
[content_uid] => 122
[row] => Array
(
[dept] => -
[student_id] => -
[email] => -
[tel] => -
[ip] => ***.***.***.***
[paper_title] => 빅데이터와 통계학
[class_dept] => 통계학과
[degree] => Master
[year_month] => 2021-11
[reason] => 연구 목적
[agreement] => Array
(
[0] => 개인정보 수집 및 이용에 동의합니다.
[1] => 위와 같이 학위논문 원문 파일을 신청합니다.
)
)
)
올려주신 내용으로 동일하게 설정하여 동작했으나
저희쪽 환경에서는 에러가 발생되지 않았습니다.
혹시 KBoard가 최신버전이 아니라면
KBoard을 최신버전으로 업데이트 해주시겠어요?
잠시 다른 테마로 바꿔서도 확인해보시고
다른 플러그인을 하나씩 비활성화해가면서 충돌이 있는지도 점검해보셔야 할 듯합니다.
점검 후에도 동일한 에러가 발생한다면
저희 고객지원 쪽 이메일로 워드프레스 관리자 계정과
FTP 접속 정보를 보내주시면 점검해드리겠습니다.
메일 내용에는 커뮤니티의 링크도 포함해주세요.
고맙습니다.
업데이트로 해결되었습니다.
업데이트로 해결된 줄 알았더니 아니었네요.
저희 진행중인 프로젝트 개발쪽에서 검토하셨는데 kboard가 php 8.0 환경에 대응이 안되어서 발생한 오류였다고 합니다.
https://github.com/cosmosfarm/KBoard-wordpress-plugin 를 통해 최신 버젼(2021.11.11 패치본)으로 업데이트 해서
이전에 나왔던 PHP 8.0 환경 오류들은 패치가 되었는데, 위 문제만큼은 해결이 안되어서
/wp-content/plugins/kboard/class/KBContentOption.class.php 파일 24번째 줄의
unserialize() 함수의 인자값의 타입을 정수로 바꿔주는 방식으로 해결하셨다고 합니다.
다음 패치에 참고하실 수 있을 것 같아서 커멘트 남깁니다.
해당 부분 조치되어 다음 업데이트에 반영될 코드
안내드립니다.
wp-content/plugins/kboard/class/KBContentOption.class.php 파일 중 기존의 아래 코드를
$object = @unserialize($this->row[$key]);
아래와 같이 변경하시면 오류를 해결 하실 수 있습니다.
$object = $this->row[$key];
if(is_string($this->row[$key])){
$object = @unserialize($this->row[$key]);
}
고맙습니다.