PHP Error Log 치명적인 오류라는데 뭐가 잘못된걸까요?

안녕하세요.

워드프레스 알림판에서 아래와 같은 PHP Error Log 가 떴네요...

보통 웬만한건 무시해 왔는데 이건 Fatal Error라고 하니 무시하면 안될것 같아서요...

최근에 한 일이라면 K보드 플러그인 업데이트 한 것 밖에 없는데 무슨 문제가 생긴걸까요?


Nov 20, 16:25:05

Fatal error: Uncaught Error: Class 'KBCommentList' not found in /home/pkists54/public_html/wp-content/plugins/kboard-comments/class/KBCommentsBuilder.class.php:43

Stack Trace
1.	
KBCommentsBuilder->create()
/home/pkists54/public_html/wp-content/plugins/kboard-comments/index.php:124
2.	
kboard_comments_builder(Array)
/home/pkists54/public_html/wp-content/plugins/kboard/class/KBoard.class.php:184
3.	
KBoard->buildComment('83')
/home/pkists54/public_html/wp-content/plugins/kboard/skin/kibon/document.php:80
4.	
include('/home/pkists54/...')
/home/pkists54/public_html/wp-content/plugins/kboard/class/KBoardSkin.class.php:156
5.	
KBoardSkin->load('kibon', 'document.php', Array)
/home/pkists54/public_html/wp-content/plugins/kboard/class/KBoardBuilder.class.php:544
6.	
KBoardBuilder->builderDocument()
/home/pkists54/public_html/wp-content/plugins/kboard/class/KBoardBuilder.class.php:309
7.	
KBoardBuilder->create()
/home/pkists54/public_html/wp-content/plugins/kboard/index.php:743
8.	
/home/pkists54/public_html/wp-content/pl in /home/pkists54/public_html/wp-content/plugins/kboard-comments/class/KBCommentsBuilder.class.php on line 43

 

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 오류 로그 발생 이외에 게시판과 댓글은 정상 동작중입니다. 

    그래도 신경이 쓰이네요^^;;

  • 안녕하세요~^^

    KBoard 게시판 플러그인과 댓글 플러그인 모두 최신 버전으로 업데이트하셨는지요?

    해당 에러 메시지는 KBCommentsBuilder.class.php 파일에서

    KBCommentList 클래스를 사용하지 못해서 표시되는 듯합니다.

    업데이트가 정상적으로 됐는지 확인해보셔야 할 듯합니다.

    FTP로 접속해서 /wp-content/plugins/kboard-comments/class/KBCommentList.class.php 파일이 있는지 확인해보세요.

     

    디버그 모드를 활성화해서 페이지에 에러 메시지가 표시되는지도 확인해보시겠어요?

    워드프레스 에러 확인하기 - 디버그 모드 활성화 방법

    고맙습니다.

  • /wp-content/plugins/kboard-comments/class/KBCommentList.class.php 파일은 잘 있습니다.

    오류 발생 시간을 보니 마침 제가 어제 해당 파일을 수정하여 저장한 시간이네요. 수정한 내용은 마지막에 댓글 정렬 순서만 바꾸었습니다. 

    혹시 코드가 잘못된걸까요?

    <?php
    /**
     * KBoard 워드프레스 게시판 댓글 리스트
     * @link www.cosmosfarm.com
     * @copyright Copyright 2019 Cosmosfarm. All rights reserved.
     * @license http://www.gnu.org/licenses/gpl.html
     */
    class KBCommentList {
    	
    	private $next_list_page = 1;
    	
    	var $board;
    	var $total;
    	var $content_uid;
    	var $parent_uid;
    	var $resource;
    	var $row;
    	var $sort = 'vote';
    	var $order = 'DESC';
    	var $rpp = 20;
    	var $page = 1;
    	
    	public function __construct($content_uid=''){
    		$this->board = new KBoard();
    		
    		if($this->getSorting() == 'best'){
    			// 인기순서
    			$this->sort = 'vote';
    			$this->order = 'DESC';
    		}
    		else if($this->getSorting() == 'oldest'){
    			// 작성순서
    			$this->sort = 'created';
    			$this->order = 'ASC';
    		}
    		else if($this->getSorting() == 'newest'){
    			// 최신순서
    			$this->sort = 'created';
    			$this->order = 'DESC';
    		}
    		
    		if($content_uid) $this->setContentUID($content_uid);
    	}
    	
    	/**
    	 * 댓글 목록을 초기화 한다.
    	 * @return KBCommentList
    	 */
    	public function init(){
    		global $wpdb;
    		if($this->content_uid){
    			$orderby = apply_filters('kboard_comments_list_orderby', "`{$this->sort}` {$this->order}", $this);
    			
    			$this->resource = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_comments` WHERE `content_uid`='{$this->content_uid}' AND (`parent_uid`<=0 OR `parent_uid` IS NULL) ORDER BY {$orderby}");
    		}
    		else{
    			// 전체 댓글을 불러올땐 최신순서로 정렬한다.
    			$this->sort = 'created';
    			$this->order = 'DESC';
    			$this->resource = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_comments` WHERE 1 ORDER BY `{$this->sort}` {$this->order} LIMIT ".($this->page-1)*$this->rpp.",{$this->rpp}");
    		}
    		$wpdb->flush();
    		return $this;
    	}
    	
    	/**
    	 * 고유번호로 댓글 목록을 초기화 한다.
    	 * @param int $content_uid
    	 * @return KBCommentList
    	 */
    	public function initWithUID($content_uid){
    		$this->setContentUID($content_uid);
    		$this->init();
    		return $this;
    	}
    	
    	/**
    	 * 부모 고유번호로 초기화 한다.
    	 * @param int $parent_uid
    	 * @return KBCommentList
    	 */
    	public function initWithParentUID($parent_uid){
    		global $wpdb;
    		$this->parent_uid = $parent_uid;
    		
    		$orderby = apply_filters('kboard_comments_list_orderby', "`{$this->sort}` {$this->order}", $this);
    		
    		$this->resource = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_comments` WHERE `parent_uid`='{$this->parent_uid}' ORDER BY {$orderby}");
    		$this->total = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_comments` WHERE `parent_uid`='{$this->parent_uid}'");
    		$wpdb->flush();
    		return $this;
    	}
    	
    	/**
    	 * 한 페이지에 표시될 댓글 개수를 입력한다.
    	 * @param int $rpp
    	 * @return KBCommentList
    	 */
    	public function rpp($rpp){
    		$rpp = intval($rpp);
    		if($rpp <= 0){
    			$this->rpp = 10;
    		}
    		else{
    			$this->rpp = $rpp;
    		}
    		return $this;
    	}
    	
    	/**
    	 * 댓글을 검색해 리스트를 초기화한다.
    	 * @param string $keyword
    	 * @return KBCommentList
    	 */
    	public function initWithKeyword($keyword=''){
    		global $wpdb;
    		
    		if($keyword){
    			$keyword = esc_sql($keyword);
    			$where = "`content` LIKE '%$keyword%'";
    		}
    		else{
    			$where = '1=1';
    		}
    		
    		$offset = ($this->page-1)*$this->rpp;
    		
    		$results = $wpdb->get_results("SELECT `uid` FROM `{$wpdb->prefix}kboard_comments` WHERE $where ORDER BY `uid` DESC LIMIT $offset,$this->rpp");
    		foreach($results as $row){
    			$select_uid[] = intval($row->uid);
    		}
    		
    		if(!isset($select_uid)){
    			$this->total = 0;
    			$this->resource = array();
    		}
    		else{
    			$this->total = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_comments` WHERE $where");
    			$this->resource = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_comments` WHERE `uid` IN(".implode(',', $select_uid).") ORDER BY `uid` DESC");
    		}
    		
    		$wpdb->flush();
    		return $this;
    	}
    	
    	/**
    	 * 게시판 정보를 반환한다.
    	 * @return KBoard
    	 */
    	public function getBoard(){
    		if(isset($this->board->id) && $this->board->id){
    			return $this->board;
    		}
    		else if($this->content_uid){
    			$this->board = new KBoard();
    			$this->board->initWithContentUID($this->content_uid);
    			return $this->board;
    		}
    		return new KBoard();
    	}
    	
    	/**
    	 * 게시물 고유번호를 입력받는다.
    	 * @param int $content_uid
    	 */
    	public function setContentUID($content_uid){
    		$this->content_uid = intval($content_uid);
    	}
    	
    	/**
    	 * 총 댓글 개수를 반환한다.
    	 * @return int
    	 */
    	public function getCount(){
    		global $wpdb;
    		if(is_null($this->total)){
    			if($this->content_uid){
    				$this->total = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_comments` WHERE `content_uid`='{$this->content_uid}'");
    			}
    			else{
    				$this->total = $wpdb->get_var("SELECT COUNT(*) FROM `{$wpdb->prefix}kboard_comments` WHERE 1");
    			}
    		}
    		return intval($this->total);
    	}
    	
    	/**
    	 * 리스트를 초기화한다.
    	 */
    	public function initFirstList(){
    		$this->next_list_page = 1;
    	}
    	
    	/**
    	 * 다음 리스트를 반환한다.
    	 * @return array
    	 */
    	public function hasNextList(){
    		global $wpdb;
    		
    		$offset = ($this->next_list_page-1)*$this->rpp;
    		
    		$this->resource = $wpdb->get_results("SELECT * FROM `{$wpdb->prefix}kboard_comments` WHERE `content_uid`='{$this->content_uid}' ORDER BY `{$this->sort}` {$this->order} LIMIT {$offset},{$this->rpp}");
    		$wpdb->flush();
    		
    		if($this->resource){
    			$this->next_list_page++;
    		}
    		else{
    			$this->next_list_page = 1;
    		}
    		
    		return $this->resource;
    	}
    	
    	/**
    	 * 다음 댓글을 반환한다.
    	 * @return Comment
    	 */
    	public function hasNext(){
    		if(!$this->resource) return '';
    		$this->row = current($this->resource);
    		
    		if($this->row){
    			next($this->resource);
    			$comment = new KBComment();
    			$comment->initWithRow($this->row);
    			$comment->board = $this->board;
    			return $comment;
    		}
    		else{
    			unset($this->resource);
    			return '';
    		}
    	}
    	
    	/**
    	 * 댓글 고유번호를 입력받아 해당 댓글을 반환한다.
    	 * @param int $uid
    	 * @return KBComment
    	 */
    	public function getComment($uid){
    		$comment = new KBComment();
    		$comment->initWithUID($row);
    		return $comment;
    	}
    	
    	/**
    	 * 댓글 정보를 입력한다.
    	 * @param int $parent_uid
    	 * @param int $user_uid
    	 * @param string $user_display
    	 * @param string $content
    	 * @param string $password
    	 */
    	public function add($parent_uid, $user_uid, $user_display, $content, $password=''){
    		global $wpdb;
    		
    		$content_uid = $this->content_uid;
    		$parent_uid = intval($parent_uid);
    		$user_uid = intval($user_uid);
    		$user_display = esc_sql(sanitize_text_field($user_display));
    		$content = esc_sql(kboard_safeiframe(kboard_xssfilter($content)));
    		$like = 0;
    		$unlike = 0;
    		$vote = 0;
    		$created = date('YmdHis', current_time('timestamp'));
    		$password = esc_sql(sanitize_text_field($password));
    		
    		$wpdb->query("INSERT INTO `{$wpdb->prefix}kboard_comments` (`content_uid`, `parent_uid`, `user_uid`, `user_display`, `content`, `like`, `unlike`, `vote`, `created`, `password`) VALUES ('$content_uid', '$parent_uid', '$user_uid', '$user_display', '$content', '$like', '$unlike', '$vote', '$created', '$password')");
    		$insert_id = $wpdb->insert_id;
    		
    		// 댓글 숫자를 게시물에 등록한다.
    		$update = date('YmdHis', current_time('timestamp'));
    		$wpdb->query("UPDATE `{$wpdb->prefix}kboard_board_content` SET `comment`=`comment`+1, `update`='{$update}' WHERE `uid`='{$content_uid}'");
    		
    		// 댓글 입력 액션 훅 실행
    		do_action('kboard_comments_insert', $insert_id, $content_uid, $this->getBoard());
    		
    		return $insert_id;
    	}
    	
    	/**
    	 * 댓글을 삭제한다.
    	 * @param int $uid
    	 */
    	public function delete($uid){
    		$comment = new KBComment();
    		$comment->initWithUID($uid);
    		$comment->delete();
    	}
    	
    	/**
    	 * 정렬 순서를 반환한다.
    	 * @return string
    	 */
    	public function getSorting(){
    		static $kboard_comments_sort;
    		
    		if($kboard_comments_sort){
    			return $kboard_comments_sort;
    		}
    		
    		$kboard_comments_sort = isset($_COOKIE['kboard_comments_sort']) ? $_COOKIE['kboard_comments_sort'] : 'oldest';
    		
    		if(!in_array($kboard_comments_sort, array('best', 'oldest', 'newest'))){
    			$kboard_comments_sort = 'oldest';
    		}
    		
    		return $kboard_comments_sort;
    	}
    }

     

  • 코드를 올려주실 땐 전체 코드보다는 수정하신 코드만 올려주시길 부탁드립니다.

    코드 상에는 문제없는 듯합니다.

    아마도 수정하시면서 뭔가 잘못 수정했을 때 로그가 남은 듯합니다.

    현재는 에러 로그가 별도로 표시되지 않는다면 신경 쓰지 않으셔도 될 듯합니다.

    고맙습니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기