첨부파일 실제로 존재하는지 어떻게 확인해요?
본문
서버를 옮기면서 파일들이 많이 누락됐는데요
내용에 엑박뜨는게 많아서
내용부분 뿌려줄떄 실제 존재하는 파일만 뿌려주려고하느데 어딜봐야할지 모르겠네요..
function get_file($bo_table, $wr_id) 여기부분을 만져야하는건지..
썸네일 함수를 만져야하는건지..
아시는분 조언좀 부탁드립니다
답변 2
![]()
view.skin.php 중간에 보시면 이렇게 첨부파일과 본문에서 이미지를 뿌려주는 구문이 있습니다.
여기에
<?php
// 파일 출력
$v_img_count = count($view['file']);
if($v_img_count) {
$file_output = '';
foreach($view['file'] as $view_file) {
$file_path = G5_DATA_PATH.'/file/'.$board['bo_table'].'/'.$view_file['file'];
if(file_exists($file_path)) {
$file_output .= get_file_thumbnail($view_file);
}
}
if($file_output) {
echo "<div id=\"bo_v_img\">\n";
echo $file_output;
echo "</div>\n";
}
}
?>
파일쪽은 이렇게 하면되고
본문 에디터 내에 이미지는
<!-- 본문 내용 시작 { -->
<div id="bo_v_con">
<?php
$content = get_view_thumbnail($view['content']);
// 본문 내 img 태그에서 없는 파일 제거
$content = preg_replace_callback(
'/<img[^>]+src=["\']([^"\']+)["\'][^>]*>/i',
function($match) {
$src = $match[1];
// 상대경로를 서버 경로로 변환
if(strpos($src, G5_DATA_URL) !== false) {
$file_path = str_replace(G5_DATA_URL, G5_DATA_PATH, $src);
} else if(strpos($src, '/data/') !== false) {
$file_path = G5_PATH . $src;
} else {
return $match[0]; // 외부 이미지는 그대로 유지
}
// 파일 존재하면 원본 반환, 없으면 빈 문자열
return file_exists($file_path) ? $match[0] : '';
},
$content
);
echo $content;
?>
</div>
<!-- } 본문 내용 끝 -->
이렇게 처리하면될거에요..
db 에 데이터가 있어도 실제 서버에 파일이 없다면 출력되지 않습니다.
!-->!-->질문의 의도에 복붙방식이 아닌
업로드된 파일이 왜 이렇게 존재하는지 개념적인 설명을 해드리겠습니다.
1. DB상의 파일정보 확인
파일이 존재한다는것은 업로드를 기준으로 판단하면
g5_board_file 이라는 테이블에
bo_table 필드가 '게시판의ID'값이고
wr_id 값이 글의 번호 입니다.
이 내용이 해당 '게시판Id'의 글 번호와 연결됩니다.
g5_write_게시판ID
테이블에서
wr_id가 글의 고유정보이고
wr_id가 같은 게시판ID가 같은 정보로 조회를하면
파일목록을 확인가능합니다.
그러면
2. 서버상의 실제파일 존재여부
서버상의
/data/file 하위에는
게시판id별로 디렉토리가 생성되서
그 하위에 실제 파일이 들어가 있습니다.
실제 업로드된 파일명과 게시판업로드된파일정보(DB)의 값은
g5_board_file 테이블에서
bf_file값으로 매핑하면 실제 파일과 연결가능하고
업로드시에 이름은 bf_source 라는 명칭으로 기록되어있습니다.
3. 파일명의 업로드시 변경되는 원리
참고로, 왜 bf_source로 업로드가 안되는가? 라는 생각을해보면
파일명중복때문입니다.
같은 테이블에 '홍길동'과 '강감찬'이가
둘다 같은패턴으로
'그림.jpg'라는 파일을 둘다 업로드했다면
어떤 그림이 '홍길동' 이올린것이고, '강감찬' 이 올린것인지 구분을 못하겠죠
이걸 판단하기위해서 고유이름으로 저장하고
다운로드시에 변환시키는 방법으로 사용됩니다.
------------
위 내용들을 참고하셔서 다른분들의 답변
혹은 직접 찾아보시면 도움이 되실겁니다.
SQL을 조회하거나
소스분석은 의존하시기보다 직접 시도해보시는게 가장 좋은 배움이라고 생각하고
SQL의 방법이 부족하시면 별도의 질문으로 해당 요소별로 답을 얻으시는게 바람직해 보입니다.