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;
}
?>
댓글 2
$output = $oDocumentController->updateDocument($obj, true);
파라미터를 저렇게 넘기는 것이 맞는지
AI를 믿지 말고 실제 document.controller.php에 있는 updateDocument() 함수를 확인해 보세요.
updateDocument가 호출되면, 즉 글이 수정되면 섬네일 폴더는 라이믹스에서 삭제하므로 별도로 삭제할 필요 전혀 없습니다.
즉 섬네일을 수동으로 갱신하셔야 한다면 그냥 updateDocument를 호출하면 나머지는 라이믹스가 알아서 처리합니다. updateDocument 호출 관련해서는 윗댓글 참고하시면 됩니다.