묻고답하기
다운로드 랭킹 위젯 mp3파일만 노출
2014.01.10 19:52
을사용중입니다 이미지만,이미지제외,모두선택이 있더군요 근데 이미지제외하면 mp3파일등도안나오고 모두를선택해야올린mp3파일하고,swf파일 다운로드 랭킹만나오더군요.. 근데전 mp3파일만 다운로드차트에 노출시키고싶은데 어떤파일을 어떻게수정해야되나요?
댓글 19
-
CTN
2014.01.11 00:17
-
사이트지원
2014.01.11 07:57
코어수정하면 따로문제되는게생기나요?? 그것만없다면 수정해보려고합니다 -
CTN
2014.01.11 11:08
업데이트마다 소스 재수정하는 문제가 번거로울것 같고 이외의 보안상 문제가 될 부분이 있는지는 저도 ^^; 좋은하루 되세요.
-
사이트지원
2014.01.11 11:25
감사합니다 검색해도 해결안되던문제였는데 좋은하루되세요! -
사이트지원
2014.01.11 15:07
음 방금 수정하고적용해봤는데 이미지제외시에도 mp3 파일이보이는게아니라 아예안보이네요
-
CTN
2014.01.11 15:15
혹시나 코드를 보시면 다운로드 횟수가 1회 이상이 아닌 경우에는 화면에 안보입니다. 그 부분을 먼저 확인해 보시죠. 저도 한번 다시 보겠습니다.
-
사이트지원
2014.01.11 15:20
아아니네요.. DB 에서 다이렉트 다운로드를 N으로바꾸니 되는군요.. 근데 한번에 MP3파일만 Y에서 N로 바꿀수있나요?... 하나하나하기엔 파일이 너무많네요....
-
CTN
2014.01.11 15:52
다행이네요^^; 위에 적어드린 내용은 추후에 파일을 저장할 때의 내용이고...
기존 자료의 수정은 말씀하신대로 DB의 Y 값을 N으로 처리하는 게 되겠습니다.
파일 일괄처리는 DB에서 쿼리로 처리하면 될거예요. 테이블명이 xe_files라고 가정하면
update xe_files set direct_download='N' where source_filename like '%mp3';
이런식이면 되겠습니다. 물론 직접 실행하기전에 다른 곳에서 테스트 해보세요^^; 특히나 조건을 안 달고 처리하든지 하시면 곤란한 상황이 생길 수도 있으니까요... DB쪽 수정 얘기를 드릴 때는 조심스럽습니다.
-
사이트지원
2014.01.11 17:07
감사합니다~ 다른곳에서 테스트할곳이없어서 하나하나했네욬ㅋㅋㅋ 번외로 질문하나드려도될까요?... 추천하면 swf파일재생이멈추더군요.. 추천해도 swf재생을 이어가는방법이있나요?
-
KrteamENT
2014.01.11 17:09
그건 ajax 애드온 사용해보시거나, ajax 플러그인을 사용하면 될거 같습니다.
-
사이트지원
2014.01.11 17:10
ajax 애드온 사용중입니다~..댓글은 써도 계속재생되는데 추천은아니네요....ㅜ
-
KrteamENT
2014.01.11 17:11
그러면 별도로 ajax 플러그인을 불러오시거나, 해야할거 같네요..
-
사이트지원
2014.01.11 17:12
어떻게해야할지원.... 스케치북 게시판사용중입니다 알려주시면감사하겠습니다..ㅠㅠ
-
KrteamENT
2014.01.11 17:13
그거 까지는 제가 커스텀 할 범위는 아닌거 같습니다..
-
사이트지원
2014.01.11 17:32
앗!... 문제있네요 다운받으면 mp3파일이 bin파일로 다운되는군요..
-
사이트지원
2014.01.11 17:39
PC에서 다운해서 재생까지는 잘되는데 모바일에서는 다운후 외계어때문에 재생이안되는군요.. 무슨설정이잘못된건가요?
-
CTN
2014.01.11 18:29
음. 방법을 다르게 해야 될 것 같습니다. 일단 기본적인 내용은 기존 소스대로 가져가고 mp3나 특정확장자에 대해서만 조건문을 달리해서 다른 내용은 동일하게 처리하고 $direct_download 값만 N 으로 처리하는 방식으로 바꿔야겠네요. 파일이 images 폴더와 binaries 폴더로 들어갈 때 다르게 저장이 되네요. 요건 저도 저녁먹고 이후 스케쥴 없으면 집에가서 봐야겠습니다. file.controller.php 파일에서 수정을 좀 해야겠네요. 일단 저녁식사들 하시죠^^
-
CTN
2014.01.11 18:38
일단 아래처럼 작업해 보시고 안되면 말씀해주세요.
// Set upload path by checking if the attachement is an image or other kinds of file if(preg_match("/\.(jpe?g|gif|png|wm[va]|mpe?g|avi|swf|flv|mp[1,2,4]|as[fx]|wav|midi?|moo?v|qt|r[am]{1,2}|m4v)$/i", $file_info['name'])) { // Immediately remove the direct file if it has any kind of extensions for hacking $file_info['name'] = preg_replace('/\.(php|phtm|html?|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)); // special character to '_' // change to md5 file name. because window php bug. window php is not recognize unicode character file name - by cherryfilter $ext = substr(strrchr($file_info['name'],'.'),1); //$_filename = preg_replace('/[#$&*?+%"\']/', '_', $file_info['name']); $_filename = md5(crypt(rand(1000000,900000), rand(0,100))).'.'.$ext; $filename = $path.$_filename; $idx = 1; while(file_exists($filename)) { $filename = $path.preg_replace('/\.([a-z0-9]+)$/i','_'.$idx.'.$1',$_filename); $idx++; } $direct_download = 'Y'; } elseif(preg_match("/\.(mp3)$/i", $file_info['name'])) { // Immediately remove the direct file if it has any kind of extensions for hacking $file_info['name'] = preg_replace('/\.(php|phtm|html?|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)); // special character to '_' // change to md5 file name. because window php bug. window php is not recognize unicode character file name - by cherryfilter $ext = substr(strrchr($file_info['name'],'.'),1); //$_filename = preg_replace('/[#$&*?+%"\']/', '_', $file_info['name']); $_filename = md5(crypt(rand(1000000,900000), rand(0,100))).'.'.$ext; $filename = $path.$_filename; $idx = 1; while(file_exists($filename)) { $filename = $path.preg_replace('/\.([a-z0-9]+)$/i','_'.$idx.'.$1',$_filename); $idx++; } $direct_download = 'N'; } 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'; }
file.controller.php 635째줄 근처
기존 내용에 mp3 만 따로 빼서 분기문으로 처리한 겁니다. 오류가 나면 말씀해 주세요. 코어 모든 내용을 다 아는 건 아니라서 이런 방식으로 처리했는데 혹시 다른 고수분들이 계시면 아마 다른 방식을 제시해 주실겁니다. 위 내용은 파일 들어가는 것도 원래 images 폴더로 들어가고 그냥 direct_dowload라는 부분만 N으로 처리됩니다.
-
사이트지원
2014.01.20 14:55
늦었지만 ㅇ이것도 출력방식이 달라지는거같네요... 이것도 이미지폴더가아닌 다른폴더로들어갑니다
mp3나 mp4 파일 같은 경우는 direct_download 즉 이미지 파일처럼 바로 다운로드가 적용되는 항목입니다.
DB테이블 xe_files에 direct_download 컬럼을 확인해보시죠. N로 표시되는 내용이 이미지제외 시 노출되는 항목이 됩니다.
지속적으로 mp3를 이미지가 아닌 것으로 걸러내시려면 코어를 건드려야 합니다.(코어수정을 권하지는 않습니다만...꼭 수정해야한다면) modules - file - file.controller.php 파일을 여셔서 insertFile함수를 찾아보시면
저기서 mp관련 쪽 내용을 지워주시면 됩니다. 다만 이런 경우에는 파일이 저장될 때 files폴더의 images 폴더에 저장이 되지 않고 binaries 폴더에 저장이 됩니다. file.controller.php 파일을 살펴보시면 대략적인 구조가 보이실 겁니다.