웹마스터 팁


 일반적으로 XE에서는 파일 업로드를 하면 비회원이 다운로드를 할 수 있어야 합니다. 해당 모듈->추가설정 페이지를 전혀 건드리지 않았다는 전제하에 default는 "비회원도 다운로드를 할 수 있다" 입니다.


 간혹 모듈의 추가설정 페이지를 건드리셔서 다운로드 포인트를 -1 이하, 1 이상으로 설정하실 때 비회원 권한 문제가 있을 수 있다고 들었습니다. (직접 확인해보지 않음)


 그리고 다운로드 가능 그룹을 특정 그룹을 선택하셨을 때 (default는 아무 그룹도 선택되지 않은 상태) 비회원 권한 문제가 발생하게 됩니다. (이건 직접 확인해보지 않았지만 당연히 이렇게 되야 한다고 생각함)

그리고 포인트 모듈에서 다운로드 포인트 수치를 -1 이하, 1 이상으로 설정하시거나, "다운로드 금지" 항목에 체크를 하시면 비회원이 다운로드를 못한다고 들었습니다. (직접 확인해보지 않음)



 그렇다면 이 모든 부분들이 다 정상적으로 설정되어 있는데 비회원이 다운로드 할 수 없다면??? 왜 그런 것일까?


 파일 모듈의 컨트롤러에 가보시면 (/modules/file/file.controller.php) 다음과 같은 함수가 있습니다.

 해당 upload_target_srl이라는 컬럼을 가진 첨부파일들을 전부 valid(적합한) 상태로 변경해주는 함수인데요.


/**
 * Set the attachements of the upload_target_srl to be valid
 * By changing its state to valid when a document is inserted, it prevents from being considered as a unnecessary file
 *
 * @param int $upload_target_srl
 * @return Object
 */
function setFilesValid($upload_target_srl)
{
$args = new stdClass();
$args->upload_target_srl = $upload_target_srl;
return executeQuery('file.updateFileValid', $args);
}

 

 XE에 파일이 첨부될 때 일반적으로 default로 files 테이블에 isvalid라는 컬럼 값이 N으로 삽입되게 됩니다.

 이 말은 즉슨, "아직까지는 사용할 수 없는 파일이다"라는 것을 명시해주는 것이지요.

 그러면 언제 이것이 사용가능하게 되느냐. 글쓰기가 완료되고 글을 등록하게 되면 insertDocument (document 모듈에 존재) 함수를 통해 글이 완전하게 등록 성공하면 해당 document_srl을 가진 첨부파일들의 isvalid 값을 전부 Y로 바꿔주게 되고, 실제 다운로드 가능한 파일들로 바뀌게 되는거죠.


 왜냐면 글을 등록하는 과정에서 파일은 첨부했는데 글쓰기를 취소할 수도 있고, 글쓰기 자체가 실패할 수도 있는 등의 상황을 피하기 위해서 이렇게 적용한 것으로 보입니다.


 저같은 경우는 파일 업로드 부분을 따로 구현을 했는데요. 그냥 form에다가 파일 업로드만 넣어버렸기 때문에 무조건적으로 해당 파일의 isvalid 값이 N인 상태였습니다. 그래서 비회원에게 권한이 없다는 에러를 뿌려줬던 상황이구요.


 물론, 이것이 이 이슈의 모든 해결 방법은 아니라고 생각합니다만 저는 그 중에 한가지 상황에 해당되는 방법을 알려드리고 있는 것이구요.

 

 만약 제가 말씀드리는 상황인지 확인하시고 싶으신 분은 일단 webmysql과 같은 본인의 db로 가셔서 xe_files 테이블을 한번 확인해보세요.


 upload_target_srl이 document_srl(혹은, module_srl)이기 때문에 이 항목으로 본인이 찾고자 하는 첨부파일을 찾으시구요.


 isvalid 컬럼을 한번 확인해보세요. N이라고 되어있으면 지금 이 문제에 해당하는 상황입니다.


 문제는 단순히 게시판으로 올렸는데 이런 문제가 발생하면 해당 파일을 지우고 다시 올려보시구요.

 그래도 안되면 해당 게시판 모듈에 문제가 있을 수도 있습니다.

 그리고 구버전에서는 관련 에러가 날 수 있습니다. 1.7.9에서는 에러가 안나는게 정상.


 만약, 본인이 직접 업로드 부분을 구현하셔서 에러가 나시는 거라면 아래처럼 하세요.


// file class의 controller 객체 import
$oFileController = &getController('file');
$upload_target_srl = "document_srl 이거나, module_srl 등등";
$output = $oFileController->setFilesValid($upload_target_srl);
if(!$output->toBool()) return $output;

 아까 위에서 보여드렸던 setFilesValid 함수를 모든 파일을 업로드 하신 뒤에 한번만 호출해주세요.

 그러면 해당 upload_target_srl에 연결된 모든 첨부파일의 isvalid 값이 Y로 변경됩니다.


 혹시, 해보시고 안되시는 분은 댓글 남겨주세요^^;


 PS. 그리고 어떤 분이 XE에서는 파일 업로드가 ajax, editor, iframe으로만 가능하다고 쓰신 글을 봤는데 일반 폼으로도 그냥 가능합니다. 일반폼 파일 업로드가 필요하신 분들은 댓글 남겨주세요^^;

제목 글쓴이 날짜
1.0.3버전 외부 페이지 쿼리 스트링 붙일때 주의 하세요. 그라미 2008.06.03
일정 기간이 지난 글에 코멘트 등록 제한 [3] file 老姜君 2008.06.03
링크 사이트 제작을 위한 어드바이스 - Planning 1 - [7] file Hammer 2008.06.04
링크 사이트 제작을 위한 어드바이스 - Planning 2 - [6] file Hammer 2008.06.04
1.03버전 글쓸때 오류... [1] 화려한 부활 2008.06.05
이전글,다음글 얻기 (검색결과 까지 포함) (수정) [8] 라르게덴 2008.06.05
2차메뉴 롤오버 위치 변환.. [3] 봄처녀 2008.06.05
링크 사이트 제작을 위한 어드바이스 - Fade In MouseOver - [3] file Hammer 2008.06.06
(위젯) 이미지 클라우드 스킨 사용 법 [2] file Simulz 2008.06.06
PHP 폼메일 [9] file 헥토르 2008.06.09
링크 사이트 제작을 위한 어드바이스 - MouseOver Preview - [6] file Hammer 2008.06.10
설치시 초기화면으로 돌아가는 문제 해결방법 [4] PICSTORY™ 2008.06.11
☆조회수.추천수 구간에 따른 이미지 나타내기(Hot 등..) - 갤러리게시판&최근이미지위젯☆ [5] 오기오기 2008.06.12
페이지 숫자에 네이버처럼 사각테두리 씌우기 [8] file 탑심 2008.06.15
할수 있다!! 내 맘대로 DB주무르기 ★DB방식 변경★ 토리세상 2008.06.16
페이지 작성이나 수정후 적용이 안돼서 고생하는 많은 분들을 위하여 [1] cyric 2008.06.17
설치후 권한 재조정 [4] 덱스터 2008.06.17
썸네일 생성이 되지 않을시 확인할 내용.. [4] 또나아빠 2008.06.17
아이프레임속 링크를 기존페이지에서 이동하기 [1] file 정다운804 2008.06.19
업그레이드 쉽고,안전하게 하기 [5] wannabewize 2008.06.21