wordpress.com Jetpack과 충돌

안녕하세요.

저번에 File upload 시 'KBFileHandler->upload() :: 디렉토리 경로가 없거나 하위 디렉토리에 쓰기 권한이 없습니다.' 에러로 문의를 드렸었는데

알려주신 https://www.cosmosfarm.com/threads/document/44079, https://www.cosmosfarm.com/threads/document/46335

를 적용한 이후 워드프레스 닷컴의 Jetpack과 충돌이 발생하면서 Jetpack이 site와 통신이 되지않는 상황이 발생이 되고

갑자기 워드프레스 닷컴의 제 계정에서 Site가 사라지는 상황이 2번이나 반복되어 원인을 찾으려고 plugin을 비활성화했다가 활성화해보니

Kboard 게시판에서 '플러그인을 활성화하는 동안 6개 문자가 비정상적으로 출력되었습니다 "headers already sent" 메세지를 받았다면 피드 동기화나 다른 문제가 발생한 듯 합니다. 이 플러그인을 비활성화하거나 제거하십시오.' 라는 메세지가 출력이 되면서

jetpack 알림판에서 '젯팩 알림판이 웹사이트와 올바르게 커뮤니케이션 할 수 없습니다. 웹사이트의 오류 로그에서 문제를 확인해보세요.'라고 나옵니다.

이 때 https://wordpress.com/home에서 'site와의 연결이 끊어졌습니다.'라고 나오다가 갑자기 'Site가 존재하지 않습니다'로 바뀌었던 것 같습니다.

Debug log는 다음과 같습니다.

[14-Oct-2020 00:47:56 UTC] PHP Warning:  session_start(): Cannot start session when headers already sent in /srv/htdocs/wp-content/plugins/kboard/index.php on line 76
[14-Oct-2020 00:47:58 UTC] PHP Warning:  json_decode() expects parameter 1 to be string, array given in /wordpress/plugins/wpcomsh/2.4.154/wpcomsh.php on line 1093

 

방금전에 신규 업데이트가 떠서 혹시나 해서 5.8과 댓글 4.9버전으로 업데이트를 하고 나니 충돌이 발생되지 않아 해결이 된건가 했는데

또다시 파일 업로드 문제가 발생이 되서 이것을 수정하니 바로 동일한 현상이 발생이 됩니다.

 

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    KBoard(케이보드) 플러그인은 설치형 워드프레스를 공식적으로 지원하고 있습니다.

    그렇기 때문에 서비스형 워드프레스에서는 예상치 못한 문제가 생길 수 있습니다.

     

    KBoard 플러그인의 버전은 최신 버전이신지요?

    KBoard 플러그인에서 session_start() 함수로 세션을 시작하게 되는데

    사용 중이신 테마 또는 다른 플러그인에서 어떠한 내용을 출력하고 있을 가능성도 있습니다.

    php 파일에 공백이나 혹은 다른 코드가 출력되는지 확인이 필요합니다.

    session_start() 전에는 어떠한 내용도 출력이 되면 안 됩니다. (공백도 안됩니다.)

     

    워드프레스에서 에러 혹은 알 수 없는 문제가 있을 때 대응 방법도 참고해보시겠어요?

    고맙습니다.

  • 알려주신 https://blog.cosmosfarm.com/?p=1162 에 내용중 theme 변경만 제외하고 전부 확인을 해봤습니다.

    Jetpack, 오류 기록 감시자, 비활성화가 불가능한 아키스밋 스팸 방지를 제외한 모든 Plugin을 비활성화 한 상태에서 kboard 게시판을 활성화했을 때도 동일한 현상이 나옵니다.

    위에 언급하신 "php 파일에 공백이나 혹은 다른 코드가 출력되는지 확인이 필요"를 어떻게 확인할 수 있을까요?

     

    php 오류 기록

    Warning: session_start(): Cannot start session when headers already sent in /srv/htdocs/wp-content/plugins/kboard/index.php on line 76

     

    크롬 개발자 툴 메세지

    [DOM] Found 2 elements with non-unique id #_wpnonce: (More info: https://goo.gl/9p2vKq) <input type=​"hidden" id=​"_wpnonce" name=​"_wpnonce" value=​"05be2b225d">​ <input type=​"hidden" id=​"_wpnonce" name=​"_wpnonce" value=​"d47a8fb528">​

    Navigated to https://11rmcms.com/wp-admin/plugins.php?error=true&charsout=6&plugin=kboard%2Findex.php&plugin_status=all&paged=1&s&_error_nonce=b3aad9e2d9
    load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:4 XHR finished loading: GET "https://11rmcms.com/wp-json/jetpack/v4/jitm?message_path=wp%3Aplugins%3Aadmin_notices&query=error%253Dtrue%252Ccharsout%253D6%252Cplugin%253Dkboard%25252Findex.php%252Cplugin_status%253Dall%252Cpaged%253D1%252Cs%253D%252C_error_nonce%253Db3aad9e2d9%252Ckboard_id%253D&full_jp_logo_exists=false&_wpnonce=c35549578e".
    send @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:4
    ajax @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:4
    n.<computed> @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:4
    (anonymous) @ jetpack-jitm.min.js?ver=1.7.3:2
    each @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:2
    each @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:2
    e @ jetpack-jitm.min.js?ver=1.7.3:2
    (anonymous) @ jetpack-jitm.min.js?ver=1.7.3:2
    i @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:2
    fireWith @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:2
    ready @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:2
    J @ load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:2
    ?v=2.0:6 XHR finished loading: GET "https://public-api.wordpress.com/rest/v1.1/me?http_envelope=1&fields=ID%2Cusername".
    p @ ?v=2.0:6
    j @ ?v=2.0:6
    ?v=2.0:6 XHR finished loading: GET "https://public-api.wordpress.com/rest/v1.1/notifications/?http_envelope=1&fields=id%2Ctype%2Cunread%2Cbody%2Csubject%2Ctimestamp%2Cmeta%2Cnote_hash&number=10".
    p @ ?v=2.0:6
    j @ ?v=2.0:6
    load-scripts.php?c=0&load[chunk_0]=jquery-core,utils&ver=5.5.1:4 XHR finished loading: POST "https://11rmcms.com/wp-admin/admin-ajax.php?_fs_blog_admin=true".

  • php 파일에 공백이나 혹은 다른 코드가 출력되는지 확인하는 방법은

    여러 가지가 있지만

    FTP로 접속해서 /wp-content/plugins/kboard/index.php 파일에

    session_start 함수가 시작되기 전 exit; 코드로 코드 실행을 중지시킨 후

    페이지에서 확인하는 방법이 있습니다.

     

    워드프레스 기본 테마에서도 정상적으로 동작하는지 확인해보시겠어요?

    고맙습니다.

  • 안녕하세요.

    워드프레스 기본 테마에서도 파일 수정 이전에는 'KBFileHandler->upload() :: 디렉토리 경로가 없거나 하위 디렉토리에 쓰기 권한이 없습니다.'가 출력되고

    파일 수정하면 '플러그인을 활성화하는 동안 6개 문자가 비정상적으로 출력되었습니다 "headers already sent" 메세지를 받았다면 피드 동기화나 다른 문제가 발생한 듯 합니다. 이 플러그인을 비활성화하거나 제거하십시오.'

    가 출력이 됩니다.

    index.php 파일에 exit;를 이 위치에

    add_action('plugins_loaded', 'kboard_plugins_loaded');
    function kboard_plugins_loaded(){
        if(!session_id() && (!is_admin() || kboard_id())){

            exit;
            session_start();

    추가하니 '플러그인을 활성화하는 동안 9개 문자가 비정상적으로 출력되었습니다 "headers already sent" 메세지를 받았다면 피드 동기화나 다른 문제가 발생한 듯 합니다.' 가 나오고

     exit;

    add_action('plugins_loaded', 'kboard_plugins_loaded');
    function kboard_plugins_loaded(){
        if(!session_id() && (!is_admin() || kboard_id())){
            session_start();

    로 넣었더니 '치명적인 오류가 발생하였습니다.'라고 나오면서 이후 화면이 정지가 되어 버렸습니다.

    php 오류 기록에는 어떻게 변경을 해도 여전히

    Warning: session_start(): Cannot start session when headers already sent in /srv/htdocs/wp-content/plugins/kboard/index.php on line 76

    이 메세지만 나오고 있습니다.

    크롬 개발자툴에서도 어제와 동일한 메세지만 보입니다.

    2주째 이러고 있어서 너무 답답하네요.

    워드프레스 닷컴에서는 thirdparty는 지원이 안되니 코스모스팜에 문의하라고만 하고

    jetpack을 안쓰면 어떻게 되냐니까 'The site will not function without Jetpack, it is what powers our WordPress.com sites.' 이런 답만 주니

    게시판이나 메일로만 주고 받으니 하루에 한번 겨우 소통이 되고 있습니다.

    제가 지원을 받을 다른 방안이 없을까요? 

  • 이전 댓글에서도 설명드린 것처럼 저희 제품은 설치형 워드프레스를 공식 지원하고 있습니다.

    서비스형 워드프레스는 외부 플러그인 설치가 가능해진 것이 비교적 역사가 길지 않고 또한 서비스형 특성상 서버 기능에 제약사항이 많기 때문에,

    복잡한 플러그인의 기능을 모두 사용하기가 어렵습니다.

     

    그렇기 때문에 서비스형 워드프레스에서 문제가 생길 경우에는

    플러그인에서 해결이 어려울 수도 있습니다.

     

    해당 문제 관련해서는

    저희 고객지원 쪽 이메일로 워드프레스 관리자 계정과 FTP 접속 정보를 보내주시면 점검해드리겠습니다.

    플러그인 쪽에서 해결이 어려울 경우 100% 해결을 보장해드리긴 어렵습니다.

    고맙습니다.

  • KBoard 플러그인에서 session_start 함수는

    FTP로 접속해서 /wp-content/plugins/kboard/index.php 파일에

    아래의 코드로 실행하고 있습니다.

    add_action('plugins_loaded', 'kboard_plugins_loaded');
    function kboard_plugins_loaded(){
    	if(!session_id() && (!is_admin() || kboard_id())){
    		session_start();
    	}
    	
    	// 언어 파일 추가
    	load_plugin_textdomain('kboard', false, dirname(plugin_basename(__FILE__)) . '/languages');
    }

    어떤 이유인지는 모르겠지만 !is_admin() || kboard_id() 쪽의 코드를 추가할 경우 문제가 되고 있습니다.

    해당 코드를 각각 분리해서 테스트를 해봐도 같습니다.

     

    위의 코드를 현재는 아래의 코드로 교체하니 에러 메시지는 표시되지 않는 듯합니다.

    add_action('plugins_loaded', 'kboard_plugins_loaded');
    function kboard_plugins_loaded(){
    // 	if(!session_id() && (!is_admin() || kboard_id())){
    // 		session_start();
    // 	}
    	if(!session_id()){
    		session_start();
    	}
    	
    	// 언어 파일 추가
    	load_plugin_textdomain('kboard', false, dirname(plugin_basename(__FILE__)) . '/languages');
    }
    

    동작 확인해보시겠어요?

    고맙습니다.

  • 안녕하세요.

    아침에 메일을 드렸는데 금요일에 요청드리고 오류 상황을 확인 하시라고 jetpack과 충돌 상태로 두었는데

    wordpress.com에서 11rmcms.com의 관리자 페이지로 들어가지 못하신다고 하셨고

    확인해보니 충돌상태가 발생하면 jetpack이 wordpress.com과 11rmcms.com 사이트간에 동기화가 되어야 하는데

    충돌로 인하여 동기화가 되지 않으니 11stcorp의 패스워드를 변경하여도 11rmcms.com에서는 11stcorp의 패스워드를 확인하지 못하는 것으로 확인이 됩니다.

    해서 아침에 충돌나는 KBController.class.php와 KBFileHandler.class.php을 원복해 놓은 상태였는데

    확인을 그 상태에서 하신 것인지 파일을 수정하고 하신 것인지를 모르겠는데요.

    지금 파일 업로드를 해보니 여전히 'KBFileHandler->upload() :: 디렉토리 경로가 없거나 하위 디렉토리에 쓰기 권한이 없습니다.'가 발생합니다.

    위의 두 개 파일을 수정해서 올리면 바로 jetpack과 충돌이 발생한다고 나오네요.

    파일에 변경한 내역은

    /wp-content/plugins/kboard/class/KBFileHandler.class.php 파일에

    아래의 코드를 삭제

    $this->abspath = untrailingslashit(ABSPATH);

    아래의 코드를 추가해두었습니다.

    $this->abspath = '';

     

    /wp-content/plugins/kboard/class/KBController.class.php 파일에

    기존 아래의 코드를 삭제

    $file_info->full_path = $path . str_replace('/', $ds, $file_info->file_path);

    아래의 코드를 추가해두었습니다.

    $file_info->full_path = str_replace('/', $ds, $file_info->file_path);

     

    열심히 확인을 해주셨는데...

    너무너무 죄송하지만 한번만 더 부탁 드립니다.

    하나하나 이렇게 확인을 해주시는 노고에 너무너무 감사드립니다.

  • 다른 파일은 수정하지 않고 KBoard 플러그인 index.php 파일만 수정했습니다.

    현재는 저희 쪽에서 KBContent.class.php, KBController.class.php, KBFileHandler.class.php, index.php 파일을 수정해뒀습니다.

     

    KBContent.class.php 파일과 KBFileHandler.class.php 파일에

    기존 아래의 코드를 주석 처리하고

    $this->abspath = untrailingslashit(ABSPATH);

    아래의 코드를 추가했습니다.

    $this->abspath = '';

     

    KBController.class.php 파일에

    기존 아래의 코드를 주석 처리하고

    $file_info->full_path = $path . str_replace('/', $ds, $file_info->file_path);

    아래의 코드를 추가했습니다.

    $file_info->full_path = str_replace('/', $ds, $file_info->file_path);

     

    index.php 파일은 초기 상태로 되돌린 후

    기존 아래의 코드를 주석 처리하고

    if(!session_id() && (!is_admin() || kboard_id())){
    	session_start();
    }

    아래의 코드를 추가했습니다.

    if(!headers_sent() && !session_id() && (!is_admin() || kboard_id())){
    	session_start();
    }

     

    위와 같이 적용할 경우 파일 업로드 및 session_start 관련 메시지가 표시되지 않는 것을 확인했습니다.

    동작 확인해보시고 그래도 해결되지 않으신다면

    jetpack과 충돌이 발생한다고 나오는 부분은 어디서 확인 가능한지 알려주시겠어요?

    고맙습니다.

  • 안녕하세요.

    이제 됩니다.

    오류도 발생하지 않고 있고 파일 업로드/다운로드 모두 이상없이 되네요.

    감사합니다. 너무 너무 감사드립니다.

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