커뮤니티

CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 7.2

게시판 스킨 기존 썸네일 파일을 삭제하고 새로운 썸네일로 갱신하는것을 시도 중에 있습니다.
관련 질문 : 썸네일 삭제 후 갱신하는 방법에 대해 문의드립니다.

 

해당 게시글 답변과 조언을 참고해서 ai에게 php스크립트를 작성하게 해서 루트에 넣고 웹브라우저에서 php를 실행( https://도메인.com/re_thumb.php)시키면 "보안정책상 허용되지 않습니다."라는 메시지가 뜨게 되는데요.

 

썸네일 갱신 시작... 대상 문서: 633763, 633762 ===================================== 문서 #633763 처리 중... - 문서 발견: 111 - 썸네일 파일 0개 삭제 - 문서 업데이트 실패: 보안정책상 허용되지 않습니다. 문서 #633762 처리 중... - 문서 발견: YOZM)소프트그릭요거트100g - 썸네일 파일 0개 삭제 - 문서 업데이트 실패: 보안정책상 허용되지 않습니다. ===================================== 완료: 0개, 실패: 2개

 

php 스크립트는 보안상 웹브라우저에서 실행이 되지 않는 부분인지 아니면 소스상의 문제인지 혹시 도움 좀 받을 수 있을까요?

 

<?php
/**
 * 라이믹스 썸네일 갱신 스크립트
 * updateDocument() 호출로 썸네일 자동 갱신
 */
require './common/autoload.php';
Context::init();

// 갱신할 문서 번호들
$document_srls = [633763, 633762];

echo "썸네일 갱신 시작...\n";
echo "대상 문서: " . implode(', ', $document_srls) . "\n";
echo "=====================================\n";

$success_count = 0;
$fail_count = 0;

// DocumentController 인스턴스 가져오기
$oDocumentController = DocumentController::getInstance();

foreach ($document_srls as $document_srl) {
    echo "문서 #{$document_srl} 처리 중...\n";
    
    try {
        // 1. 문서 객체 가져오기
        $oDocument = DocumentModel::getDocument($document_srl);
        if (!$oDocument->isExists()) {
            echo "- 문서가 존재하지 않습니다.\n";
            $fail_count++;
            continue;
        }
        
        echo "- 문서 발견: {$oDocument->getTitleText()}\n";
        
        // 2. 해당 문서의 썸네일 폴더 삭제
        $deleted_files = deleteThumbnailFolder($document_srl);
        echo "- 썸네일 파일 {$deleted_files}개 삭제\n";
        
        // 3. updateDocument() 호출로 썸네일 자동 갱신
        $obj = new stdClass();
        $obj->document_srl = $document_srl;
        $obj->content = $oDocument->get('content'); // 기존 내용 그대로
        $obj->title = $oDocument->get('title'); // 기존 제목 그대로
        
        // 문서 업데이트 (썸네일 자동 갱신됨)
        $output = $oDocumentController->updateDocument($obj, true);
        
        if ($output->toBool()) {
            echo "- 문서 업데이트 완료 (썸네일 자동 갱신)\n";
            $success_count++;
        } else {
            echo "- 문서 업데이트 실패: " . $output->getMessage() . "\n";
            $fail_count++;
        }
        
    } catch (Exception $e) {
        echo "- 오류: " . $e->getMessage() . "\n";
        $fail_count++;
    }
    
    echo "\n";
}

echo "=====================================\n";
echo "완료: {$success_count}개, 실패: {$fail_count}개\n";

/**
 * 해당 문서의 썸네일 폴더/파일들 삭제
 */
function deleteThumbnailFolder($document_srl) {
    $deleted_count = 0;
    
    // 라이믹스 썸네일 경로들
    $possible_paths = [
        RX_BASEDIR . 'files/cache/thumbnail/',
        RX_BASEDIR . 'files/thumbnails/',
        './files/cache/thumbnail/',
        './files/thumbnails/'
    ];
    
    foreach ($possible_paths as $base_path) {
        if (!is_dir($base_path)) continue;
        
        // 해당 문서 관련 썸네일 파일들 찾기
        $patterns = [
            $base_path . "*{$document_srl}*",
            $base_path . "thumb_{$document_srl}*",
            $base_path . "{$document_srl}/*",
            $base_path . "*/{$document_srl}*"
        ];
        
        foreach ($patterns as $pattern) {
            $files = glob($pattern);
            foreach ($files as $file) {
                if (is_file($file)) {
                    if (unlink($file)) {
                        $deleted_count++;
                    }
                } elseif (is_dir($file)) {
                    // 디렉토리인 경우 하위 파일들도 삭제
                    $sub_files = glob($file . '/*');
                    foreach ($sub_files as $sub_file) {
                        if (is_file($sub_file) && unlink($sub_file)) {
                            $deleted_count++;
                        }
                    }
                    // 빈 디렉토리 삭제
                    if (is_dir($file) && count(scandir($file)) == 2) {
                        rmdir($file);
                    }
                }
            }
        }
    }
    
    return $deleted_count;
}
?>

마트몬 Lv. 8

댓글 2

  • 6시간 전 #1918180

    $output = $oDocumentController->updateDocument($obj, true);

    파라미터를 저렇게 넘기는 것이 맞는지

    AI를 믿지 말고 실제 document.controller.php에 있는 updateDocument() 함수를 확인해 보세요.

  • 1시간 전 #1918187

    updateDocument가 호출되면, 즉 글이 수정되면 섬네일 폴더는 라이믹스에서 삭제하므로 별도로 삭제할 필요 전혀 없습니다.

     

    즉 섬네일을 수동으로 갱신하셔야 한다면 그냥 updateDocument를 호출하면 나머지는 라이믹스가 알아서 처리합니다. updateDocument 호출 관련해서는 윗댓글 참고하시면 됩니다.