파일 첨부
본문
파일첨부 관련인데요.
$dest_path = $mb_dir.'/'.$mb_id.'.gif';
이렇게 파일이름과 확장자가 고정으로 저장되어 버리는 거 말고
$dest_path = $mb_dir.'/'.첨부파일;
첨부파일명과 확장자를 원본으로 저장을 할려면 어디를수정해야 될까요
// 첨부파일
$mb_dir = G5_DATA_PATH.'/member/'.$mb_id;
// 파일 삭제
if (isset($_POST['del_mb_icon'])) {
@unlink($mb_dir.'/'.$_FILES['mb_icon']['name']);
}
$msg = "";
// 파일 업로드
$mb_icon = '';
if (isset($_FILES['mb_icon']) && is_uploaded_file($_FILES['mb_icon']['tmp_name'])) {
if (preg_match("/(\.ppt|pptx|xls|docx)$/i", $_FILES['mb_icon']['name'])) {
// 아이콘 용량이 설정값보다 이하만 업로드 가능
if ($_FILES['mb_icon']['size'] <= $config['cf_member_icon_size']) {
@mkdir($mb_dir, G5_DIR_PERMISSION);
@chmod($mb_dir, G5_DIR_PERMISSION);
$dest_path = $mb_dir.'/'.$_FILES['mb_icon']['name'];
move_uploaded_file($_FILES['mb_icon']['tmp_name'], $dest_path);
chmod($dest_path, G5_FILE_PERMISSION);
} else {
$msg .= '관련서류를 '.number_format($config['cf_member_icon_size']).'바이트 이하로 업로드 해주십시오.';
}
} else {
$msg .= $_FILES['mb_icon']['name'].'은(는) 문서파일이 아닙니다.';
}
}
답변 5
원본 파일이름이 한글이 아닌지 확인이 필요할듯 하네요.
영어이름의 파일을 올려보시고 동일한 현상인지 먼저 확인이 되어야 될거 같습니다.
$dest_path = $mb_dir.
'/'
.
$_FILES
[
'mb_icon'
][
'name'
];
로직에 있는 저 부분 인듯 합니다만..
그리고 질문 내용과는 상관없지만
// 파일 삭제
if (isset($_POST['del_mb_icon'])) {
@unlink($mb_dir.'/'.$_FILES['mb_icon']['name']);
}
이부분도 잘 못 된거 같네요
$member['mb_id'].'.gif';
근본적으로 위와 같이 쓰게 된 이유는
해당 파일은 회원당 하나만 올린다는 가정에서 출발했습니다.
그리고 아이콘이니까 당연히 gif 이고 크기와 용량을 제한 한 것이구요.
하나 밖에 없고 아이디가 파일 이름이므로 굳이 디비에 저장할 필요가 없습니다.
그러나 웹프리존 님과 같이 할려면
일단 member 테이블의 추가 필드를 활용하시거나 새로운 필드를 생성하여
그곳에 실제 저장된 파일명을 저장해 두어야 합니다.
그래야
그 회원의 어떤파일이 그 용도로 올려져 잇는지 확인이 가능하며
출력이나 다운로드 삭제 등도 처리할수가 있습니다.
참고 소스로는
write_update.php 에서 파일 첨부 처리 부분을 참고 하시면 될것 같습니다.
첨부파일명과 확장자를 원본으로 저장을 할려면
1. 문제점을 알아채셨다시피 무슨 이름으로 저장되어있는지 알지 못하므로 이미지를 불러올 수가 없습니다
-- 여분필드에 화일명을 저장하고 이것을 이용해서 화일을 찾아오는 방식으로 코드를 바꾸세요
2. 다른 사람이 동일한 화일이름으로 업로드를 하게 되면 어떻게 할 것인가요?
예를들어 asdf라는 회원이 test.gif를 업로드 하고 as1234라는 회원이 test.gif를 업로드 하면???