묻고답하기
파일첨부 부분 절대경로 수정에 대해서 여쭤봅니다.
2011.03.19 12:04
현재 file.controller.php 부분에서 파일첨부 경로를 변경하는걸로 알고 있습니다.
// 이미지인지 기타 파일인지 체크하여 upload path 지정
if(preg_match("/\.(jpg|jpeg|gif|png)$/i", $file_info['name'])) {
// direct 파일에 해킹을 의심할 수 있는 확장자가 포함되어 있으면 바로 삭제함
$file_info['name'] = preg_replace('/\.(php|phtm|html|htm|cgi|pl|exe|jsp|asp|inc)/i', '$0-x',$file_info['name']);
$file_info['name'] = str_replace(array('<','>'),array('%3C','%3E'),$file_info['name']);
$path = sprintf("./files/attach/images/%s/%s", $module_srl,getNumberingPath($upload_target_srl,3));
// 파일 이름에서 특수문자를 _로 변환
$_filename = preg_replace('/[#$&*?+%"\']/', '_', $file_info['name']);
$filename = $path.$_filename;
$idx = 1;
while(file_exists($filename)) {
$filename = $path.preg_replace('/\.([a-z0-9]+)$/i','_'.$idx.'+
'.$1',$_filename);
$idx++;
}
$direct_download = 'Y';
}
// 동영상파일일 경우 upload path는 videos
if(preg_match("/\.(wmv|wma|mpg|mpeg|avi|swf|flv|mp1|mp2|mp3|mp4|asf|wav|asx|mid|midi|asf|mov|moov|qt|rm|ram|ra|rmm|m4v)$/i", $file_info['name'])) {
// direct 파일에 해킹을 의심할 수 있는 확장자가 포함되어 있으면 바로 삭제함
$file_info['name'] = preg_replace('/\.(php|phtm|html|htm|cgi|pl|exe|jsp|asp|inc)/i', '$0-x',$file_info['name']);
$file_info['name'] = str_replace(array('<','>'),array('%3C','%3E'),$file_info['+
'name']);
$path = sprintf("./files/attach/videos/%s/%s", $module_srl,getNumberingPath($upload_target_srl,3));
// 파일 이름에서 특수문자를 _로 변환
$_filename = preg_replace('/[#$&*?+%"\']/', '_', $file_info['name']);
$filename = $path.$_filename;
echo $filename;
$idx = 1;
while(file_exists($filename)) {
$filename = $path.preg_replace('/\.([a-z0-9]+)$/i','_'+
'.$idx.'.$1',$_filename);
$idx++;
}
$direct_download = 'Y';
} else {
$path = sprintf("./files/attach/binaries/%s/%s", $module_srl, getNumberingPath($upload_target_srl,3));
$filename = $path.md5(crypt(rand(1000000,900000), rand(0,100)));
$direct_download = 'N';
}
위소스를 보시면 아시겠지만.. 동영상 파일들을 따로 분리를 하여 경로를 변경했습니다.
일단 서버 설명을 드리겠습니다.
일단 서버 2대가 있습니다. A = 메인서버 , B = 미디어서버(동영상 파일만) 입니다.
A서버에서 네트워크 드라이브 연결로 B서버 하드를 불러왔습니다.
이렇게 하면 아시는분들은 아시겟지만 A서버에서 B서버 하드를 읽기/쓰기/수정 가능합니다.
일단 파일첨부 부분이 절대경로가 아닌 상대경로인데...
제가 구현하고자 하는건...
동영상파일 첨부할시만 $path를 절대경로인 B서버 경로로 변경하려 합니다.
ffmpeg로 동영상 파일도 변환하게끄름 구현도 해야하는데..
서버가 window 서버라 ffmpeg php 모듈을 설치하기가 어렵더라구요.
그래서 exec,system 명령어로 업로드한 동영상파일을 인코딩 해준다음
기존 업로드한 파일 삭제후 인코딩한 동영상을 등록시키려 합니다.
JSP전공하며.. PHP는 이번에 처음 접하였는데.. 도무지 알수가 없네요 ㅠㅠ..
일단 제일 시급한건 파일첨부 경로를 절대경로로 수정 하는겁니다.
아시는분 계시면 제발.. 알려주시길 바랍니다..ㅠ ㅠ
댓글 1
-
라르게덴
2011.03.19 21:43
-
정병열
2011.03.21 09:26
다시 말씀드리지만.. $path는.. 상대경로이며 실제 $path의 경로는 웹서버 기본루트의 폴더로 시작 됩니다 그래서 위에 방식대로는 웹루투 밖의 절대경로 수정이 불가능 합니다.
if(preg_match("/\.(wmv|wma|mpg|mpeg|avi|swf|flv|mp1|mp2|mp3|mp4|asf|wav|asx|mid|midi|asf|mov|moov|qt|rm|ram|ra|rmm|m4v)$/i",
$file_info['name'])) {
// direct 파일에 해킹을 의심할 수 있는 확장자가 포함되어 있으면 바로 삭제함
$file_info['name'] = preg_replace('/\.(php|phtm|html|htm|cgi|pl|exe|jsp|asp|inc)/i', '$0-x',$file_info['name']);
$file_info['name'] = str_replace(array('<','>'),array('%3C','%3E'),$file_info['name']);
$path = sprintf("절대경로/files/attach/videos/%s/%s", $module_srl,getNumberingPath($upload_target_srl,3));
바꿔주시게 되면 다운로드할 경우나 삭제할 경우의 로직도 같은 부분을 확인하셔야 될 수 있습니다.