웹마스터 팁
file 모듈 insertFile() manual_insert 시 디렉토리생성 에러 문제 해결 방법
2019.01.02 14:13
안녕하세요!
오랜만에 웹마스터팁 게시판에 글쓰네요^^
XE로 프로젝트 진행하던 중 XE의 파일 업로드기능이 필요하여 XE의 file모듈을 이용하기로 결정했었는데요^^
.....쉽게 생각했었는데... 파일 업로드를 할수 없더라구요...ㅠㅠ (msg_not_permitted_create 에러 뿜뿜...ㅠ)
더더욱이 로그에도 제대로 찍히지 않아서...ㅠㅠ (저는 XE debug기능 보다는 apache 로그를 위주로 작업하는지라...ㅠ)
아무리 찾아도 이렇다할만한 해결책이 없어서.... 디버깅하던 중....
제가 알아낸 방법에 대해서 공유하고자 이렇게 글을 올립니다^^
우선 insertFile 함수를 보면,
function insertFile($file_info, $module_srl, $upload_target_srl, $download_count = 0, $manual_insert = false)
이렇게 되어있죠^^
기본적으로 $manual_insert 값에 TRUE를 주게 되면 수동으로 파일업로드가 가능해집니다...
여하튼.... 함수를 살펴보게 되면, 여러가지 전처리를 해주게 되고, xe가 설치된 디렉토리의 files디렉토리에 해당 서브 디렉토리를 만들고 tmp파일을 복사해서 넣게 됩니다...
이 과정에서 디렉토리를 만드는 함수가 FileHandler::makeDir($path)죠^^
사실상 FileHandler::makeDir($path)에 보면... 별 내용은 없습니다... 단지 mkdir 명령어를 이용해 인자값으로 받은 $path변수에 지정된 디렉토리에 티렉토리를 만들고 권한을 주는 내용이죠....
if(!FileHandler::makeDir($path)) return new BaseObject(-1,'msg_not_permitted_create'.$path);
그런데.... 안되다니.... (털썩...)
재밌는건 게시판의 파일첨부 기능은 정상적으로 동작됩니다 ㅠㅠ
여하튼 각설하고.....
저는 $path 변수를 찍어보니 ./files/****/***/***/ 이라는 값을 인자로 넘기더군요....
음............. 혹시 디렉토리 경로를 제대로 못잡는것인가.... 싶어서 _XE_PATH_ 상수를 이용해 $path변수를 생성하는 부분에 넣어주었습니다...
_XE_PATH_ 상수는 서버 내에 XE가 설치된 디렉토리의 경로를 가지고 있죠....
예를 들어 XE가 설치된 디렉토리가 /var/www/html/ 이라면 _XE_PATH_ 상수에는 "/var/www/html/"값이 들어가게 되고,
위 소스를 해석하면 "/var/www/html/./files/attach/images/%s/%s"로 경로를 넘기게 됩니다.... 결국 절대경로값을 넘기는 거죠^^
결과는.... 정상작동이 됩니다^^
혹여 저또한 미래에는 기억못할수도 있고.... 에러로그에도 찍히지 않은 이 문제때문에 밤새실 분들을 위해 이렇게 기록삼아... 팁 게시판에 올려봅니다^^