이전글인 18691 번에서 제가 생각했었던대로 플러그인 모듈 두개만 처리하며 될 줄 알았는데,

이제보니 수정했다고 생각한 서드파티 모듈들의 문제가 실제 게시판들을 작성하고 불러오니까 주욱 튀어나오네요.

몇시간을 꼬박 뒤지다가 결국은 제가 더 모르는 내용들만 많아지니 한숨만 나옵니다.

결국은 하나하나, 질문드리면서 많은 분들께 도움을 요청드려야할 상황이네요.

아마 이 내용들도 쌓여서 나중에 다른분들께도 도움이 되었으면 합니다.

저도 7.2 넘어올때 그렇게 편히 왔으니, 다른분들의 도움을 잘 남겨서 8.3 넘어가시는 분들께 조금이나마 참고가 되었으면 합니다.

 

사용버전

라이믹스 : 2.1.12

PHP : 8.3

 

레이아웃 디자인으로 가서 기존 페이지 구성했던 홈페이지 설정값을 모두 반영했습니다.

그랬더니 아래처럼 메인페이지가 난리네요;;

 

 

multi_limit); $multi_readed_count = $_SESSION['sejin7940_readed_count'][$document_srl]; if(!$multi_readed_count) { $_SESSION['sejin7940_readed_count'][$document_srl]=="0"; $multi_readed_count = 0; } if( ($addon_info->multi_use=="admin" || $addon_info->multi_use=="all") && $logged_info->is_admin=="Y" ) $readed_up = "Y"; // 관리자는 예외 else if ( $addon_info->multi_use=="all") { if($multi_limit && $multi_readed_count >0 && $multi_readed_count < $multi_limit) { $readed_up = "Y"; } elseif(!$multi_limit) { $readed_up = "Y"; } } // 랜덤 조회수 증가 기능 사용 if($logged_info->is_admin=="Y") { $random_max = $addon_info->random_max_admin; if(!$random_max) $random_max=1; if($random_max>20) $random_max=20; // 관리자시 최대값 20으로 제한 $random_min = $addon_info->random_min_admin; if(!$random_min) $random_min=1; if($random_max<$random_min) $random_min = $random_min; } else { $random_max = $addon_info->random_max; if(!$random_max) $random_max=1; if($random_max>10) $random_max=10; // 일반회원의 경우 최대값 10으로 제한 $random_min = $addon_info->random_min; if(!$random_min) $random_min=1; if($random_max<$random_min) $random_min = $random_min; } // 랜덤 증가 or 중복 조회로 랜덤증가시 if ( $random_max>1 && (($addon_info->random_use=="admin" && $logged_info->is_admin=="Y") || $addon_info->random_use=="all")) { if($readed_up=="Y") $update_readed_count = rand ($random_min, $random_max); elseif(!$multi_readed_count) $update_readed_count = rand ($random_min, $random_max)-1; // 첫 조회시엔 view 이후에 조회수 1증가되기에 } // 중복 조회수 증가 - 1씩 증가시 elseif ($readed_up=="Y") { // 첫 조회시엔 이 애드온을 쓸 필요가 없기에 중복인 경우에만 적용 $update_readed_count = 1; } //애드온 시작 조건 설정 if($called_position == 'before_module_proc' && $this->act=='dispBoardContent' && $document_srl && $update_readed_count) { $args->document_srl = $document_srl; if($update_readed_count==20) executeQuery('addons.sejin7940_readed_count.updateReadedCount20', $args); elseif($update_readed_count==19) executeQuery('addons.sejin7940_readed_count.updateReadedCount19', $args); elseif($update_readed_count==18) executeQuery('addons.sejin7940_readed_count.updateReadedCount18', $args); elseif($update_readed_count==17) executeQuery('addons.sejin7940_readed_count.updateReadedCount17', $args); elseif($update_readed_count==16) executeQuery('addons.sejin7940_readed_count.updateReadedCount16', $args); elseif($update_readed_count==15) executeQuery('addons.sejin7940_readed_count.updateReadedCount15', $args); elseif($update_readed_count==14) executeQuery('addons.sejin7940_readed_count.updateReadedCount14', $args); elseif($update_readed_count==13) executeQuery('addons.sejin7940_readed_count.updateReadedCount13', $args); elseif($update_readed_count==12) executeQuery('addons.sejin7940_readed_count.updateReadedCount12', $args); elseif($update_readed_count==11) executeQuery('addons.sejin7940_readed_count.updateReadedCount11', $args); elseif($update_readed_count==10) executeQuery('addons.sejin7940_readed_count.updateReadedCount10', $args); elseif($update_readed_count==9) executeQuery('addons.sejin7940_readed_count.updateReadedCount9', $args); elseif($update_readed_count==8) executeQuery('addons.sejin7940_readed_count.updateReadedCount8', $args); elseif($update_readed_count==7) executeQuery('addons.sejin7940_readed_count.updateReadedCount7', $args); elseif($update_readed_count==6) executeQuery('addons.sejin7940_readed_count.updateReadedCount6', $args); elseif($update_readed_count==5) executeQuery('addons.sejin7940_readed_count.updateReadedCount5', $args); elseif($update_readed_count==4) executeQuery('addons.sejin7940_readed_count.updateReadedCount4', $args); elseif($update_readed_count==3) executeQuery('addons.sejin7940_readed_count.updateReadedCount3', $args); elseif($update_readed_count==2) executeQuery('addons.sejin7940_readed_count.updateReadedCount2', $args); elseif($update_readed_count==1) executeQuery('addons.sejin7940_readed_count.updateReadedCount1', $args); $_SESSION['sejin7940_readed_count'][$document_srl]=$multi_readed_count+1; // 동일글 조회수 } elseif($called_position == 'before_module_proc' && $this->act=='dispBoardContent' && !$update_readed_count && !$multi_readed_count) { $_SESSION['sejin7940_readed_count'][$document_srl]=$multi_readed_count+1; // 동일글 조회수 } ?>multi_limit); $multi_readed_count = $_SESSION['sejin7940_readed_count'][$document_srl]; if(!$multi_readed_count) { $_SESSION['sejin7940_readed_count'][$document_srl]=="0"; $multi_readed_count = 0; } if( ($addon_info->multi_use=="admin" || $addon_info->multi_use=="all") && $logged_info->is_admin=="Y" ) $readed_up = "Y"; // 관리자는 예외 else if ( $addon_info->multi_use=="all") { if($multi_limit && $multi_readed_count >0 && $multi_readed_count < $multi_limit) { $readed_up = "Y"; } elseif(!$multi_limit) { $readed_up = "Y"; } } // 랜덤 조회수 증가 기능 사용 if($logged_info->is_admin=="Y") { $random_max = $addon_info->random_max_admin; if(!$random_max) $random_max=1; if($random_max>20) $random_max=20; // 관리자시 최대값 20으로 제한 $random_min = $addon_info->random_min_admin; if(!$random_min) $random_min=1; if($random_max<$random_min) $random_min = $random_min; } else { $random_max = $addon_info->random_max; if(!$random_max) $random_max=1; if($random_max>10) $random_max=10; // 일반회원의 경우 최대값 10으로 제한 $random_min = $addon_info->random_min; if(!$random_min) $random_min=1; if($random_max<$random_min) $random_min = $random_min; } // 랜덤 증가 or 중복 조회로 랜덤증가시 if ( $random_max>1 && (($addon_info->random_use=="admin" && $logged_info->is_admin=="Y") || $addon_info->random_use=="all")) { if($readed_up=="Y") $update_readed_count = rand ($random_min, $random_max); elseif(!$multi_readed_count) $update_readed_count = rand ($random_min, $random_max)-1; // 첫 조회시엔 view 이후에 조회수 1증가되기에 } // 중복 조회수 증가 - 1씩 증가시 elseif ($readed_up=="Y") { // 첫 조회시엔 이 애드온을 쓸 필요가 없기에 중복인 경우에만 적용 $update_readed_count = 1; } //애드온 시작 조건 설정 if($called_position == 'before_module_proc' && $this->act=='dispBoardContent' && $document_srl && $update_readed_count) { $args->document_srl = $document_srl; if($update_readed_count==20) executeQuery('addons.sejin7940_readed_count.updateReadedCount20', $args); elseif($update_readed_count==19) executeQuery('addons.sejin7940_readed_count.updateReadedCount19', $args); elseif($update_readed_count==18) executeQuery('addons.sejin7940_readed_count.updateReadedCount18', $args); elseif($update_readed_count==17) executeQuery('addons.sejin7940_readed_count.updateReadedCount17', $args); elseif($update_readed_count==16) executeQuery('addons.sejin7940_readed_count.updateReadedCount16', $args); elseif($update_readed_count==15) executeQuery('addons.sejin7940_readed_count.updateReadedCount15', $args); elseif($update_readed_count==14) executeQuery('addons.sejin7940_readed_count.updateReadedCount14', $args); elseif($update_readed_count==13) executeQuery('addons.sejin7940_readed_count.updateReadedCount13', $args); elseif($update_readed_count==12) executeQuery('addons.sejin7940_readed_count.updateReadedCount12', $args); elseif($update_readed_count==11) executeQuery('addons.sejin7940_readed_count.updateReadedCount11', $args); elseif($update_readed_count==10) executeQuery('addons.sejin7940_readed_count.updateReadedCount10', $args); elseif($update_readed_count==9) executeQuery('addons.sejin7940_readed_count.updateReadedCount9', $args); elseif($update_readed_count==8) executeQuery('addons.sejin7940_readed_count.updateReadedCount8', $args); elseif($update_readed_count==7) executeQuery('addons.sejin7940_readed_count.updateReadedCount7', $args); elseif($update_readed_count==6) executeQuery('addons.sejin7940_readed_count.updateReadedCount6', $args); elseif($update_readed_count==5) executeQuery('addons.sejin7940_readed_count.updateReadedCount5', $args); elseif($update_readed_count==4) executeQuery('addons.sejin7940_readed_count.updateReadedCount4', $args); elseif($update_readed_count==3) executeQuery('addons.sejin7940_readed_count.updateReadedCount3', $args); elseif($update_readed_count==2) executeQuery('addons.sejin7940_readed_count.updateReadedCount2', $args); elseif($update_readed_count==1) executeQuery('addons.sejin7940_readed_count.updateReadedCount1', $args); $_SESSION['sejin7940_readed_count'][$document_srl]=$multi_readed_count+1; // 동일글 조회수 } elseif($called_position == 'before_module_proc' && $this->act=='dispBoardContent' && !$update_readed_count && !$multi_readed_count) { $_SESSION['sejin7940_readed_count'][$document_srl]=$multi_readed_count+1; // 동일글 조회수 } ?> 

 

라고 화면에 깔려있고, 아래 오류코드 정보가 있어 같이 남겨드립니다.

 

 

[서버 오류 내역]

TypeError #0 "implode(): Argument #1 ($array) must be of type array, string given" in layouts/widein/layout.html on line 129

배열이 아닌 변수에 배열 함수를 사용하려 하고 있습니다. 오래된 자료에서 종종 사용하던 코딩 방식이나 최근 PHP에서는 허용되지 않으니, 에러 메시지에 포함된 파일명과 줄 번호를 참고하여 수정하세요.

layouts/widein/layout.html:129

 

 

[129 라인 코드를 살펴봤습니다]

 <!--@else-->
                <div class="cameron-container boxs">
                        <div class="cameron-row boxs">
                                <div class="cameron-md-12 boxs">
                                        <block cond="$layout_info->gallery_mid">
                                                {@
                                                        $args=new stdClass();
                                                        $args->site_srl=$site_srl;
                                                        $args->mid=$layout_info->gallery_mid;
                                                        $msrlq_gallery=executeQueryArray('module.getModuleSrlByMid', $args);
                                                        $msrl_gallery=$msrlq_gallery->data;
                                                }
                                                <block loop="$msrl_gallery=>$key,$val">{@ $msrli_gallery[$key]=$msrlq_gallery->data[$key]->module_srl; }</block>
                                                {@ $msrls_gallery=implode(',',$msrli_gallery)} //129번 라인
                                        </block>
                                        <img class="zbxe_widget_output" widget="cameronGallery" skin="wideinGallery" content_type="document" module_srls="{$msrls_gallery}" use_limit="N" order_target="{$layout_info->gallery_order_target}" order_type="{$layout_info->gallery_order_type}" gallery_title="{$layout_info->gallery_title}" option_view="thumbnail,title<!--@if($layout_info->gallery_voted!="off")-->,voted_count<!--@endif-->" thumbnail_width="262" thumbnail_height="175" thumbnail_type="crop" list_count="{$layout_info->gallery_count}" cols_list_count="4" subject_cut_size="24" show_browser_title="N" show_category="N" show_comment_count="Y"|cond="$layout_info->gallery_comment!='off'" category_range="all" hyperlink="Y" hyperlink_src="article" view_permission="list" view_secret_document="all_user" />
                                </div>
                        </div>
                </div>
        <!--@endif-->

혹시나 해서 implode 관련하여 검색을 해보았고, 해결법이 몇가지 나와 있는듯 했으나, 제 짧은 지식으로는 이해를 못했습니다. 어떻게 수정을 하면 좋을까요?

  • profile
    $msrli_gallery 변수가 null일때 발생합니다.

    $msrli_gallery ?? []

    처럼 변수가 null인 경우 빈 배열을 넘겨줌으로써 오류 자체는 숨길수 있지만 궁극적인 원인은 해당 변수에 null이 들어가는것이므로 다른부분을 봐야 합니다.

    코드상 해당 변수는 레이아웃 설정에 입력한 mid 기준 모듈 srl을 가져오는것으로 보이는데 존재하지 않는 mid 입력시 반환값이 비면서 문제가 될수 있어 보입니다.
  • profile profile
    $msrl_gallery 가 결국 위의 쿼리 돌릴때 배열로 반환 시켜주는 방향으로 구햔되어잇어서 묹가 없을듯 합니다 기본적인 문제는 위쪽 쿼리 실행하는게 노루그 발생되엇을 기능성이 가장 커 보이네요
  • profile

    위처럼 소스가 모조리 노출되는 것은 <?php로 시작해야 하는 것을 그냥 <?로 시작해서 그럴 가능성도 있습니다.

  • ?

    말씀주신대로 시도해보려 했지만, 수정할 부분을 이해하질 못해서 7.4로 우선 사용하기로 했습니다. 8.3 부분은 시간을 두고 찬찬히 공부해봐야 할 것 같습니다. 여러 도움에 감사드립니다.