티스토리 뷰

하아...또 백만년만에 쓰는 프로그래밍 포스팅..

하는거 별로 없는거 같은데 생각해보면 나 회사에서 할꺼 많음 ㅇㅇ.

지난달이랑 이번달이랑 월초에 사이트랑 모바일웹 리뉴얼 때문에 너무 정신이 없다.ㅜㅜ

수정사항들이 미친듯이 쏟아져 나온다ㅠㅜ 우왕ㅋ굳ㅋ


요즘은 글을 작성할 때 거의 네이버 스마트에디터를 끌어와서 게시물을 올리는데,

그대로 끌어와서 쓰는거까진 좋으나...문제가 생겼다

바로 사용자들이 이미지를 업로드 할 때의 파일명.ㅜㅜ

예를들어, A라는 사람이 123.jpg라는 이미지를 업로드하고 글을 쓴다.

그럼 123.jpg라는 이미지가 웹상에 등록이 되는데,

문제는 B라는 사람도 다른이미지를 똑같은 파일명인 123.jpg라고 업로드 하면서 생긴다.

B가 올린 123.jpg 파일이 웹상에 이미 등록되있는 파일명과 똑같으므로,

B의 이미지가 A의 이미지를 덮어써버리게 되는것!

그렇게 되면 A가 작성한 글에 B가 올린 이미지가 뜨는 요상한 상황이 발생.ㅜㅜ


파일업로드로 이미지를 올릴때는 중복되는 파일명이 나오지않도록 hash함수로 파일명 중복을 막아놨었는데,

에디터로 넘어오니 똑같은거 같으면서도 순간 어떻게 처리해야되지? 하고 멘붕.


오전엔 다른 업무들 때문에 정신없다가 오후되서야 내내 이걸로 끙끙거리다가 나름의 방법을 찾았다.

울 과장님이 보면 왜이렇게 처리했냐고 구박줄 완전 개노가다의 방법.=_+

나년의 한계는 여기까지인가봉가.


에디터가 있는 폴더속에 photo_uploader/popup/file_uploader.php & photo_uploader/popup/file_uploader_html5.php

두개의 파일을 열어준다. (각각 html5용과 그렇지않은 버전의 파일이므로 두개다 수정해줘야한다.)


photo_uploader/popup/file_uploader.php


// SUCCESSFUL <-일단 파일업로드 성공!


if(bSuccessUpload) {

$tmp_name = $_FILES['Filedata']['tmp_name'];

$name = $_FILES['Filedata']['name'];

$wdate = time();


$filename_ext = strtolower(array_pop(explode('.',$name)));


$allow_file = array("jpg", "png", "bmp", "gif");


$upFile = "aaa".$name[0].$wdate;  //임의의 파일명(파일확장자제외한)을 만들어줌


if(!in_array($filename_ext, $allow_file)) {  //등록된 파일의 확장자 검사


$url .= '&errstr='.$upFile;


} else {


$uploadDir = '../../upload/';

if(!is_dir($uploadDir)){

mkdir($uploadDir, 0777);  //폴더가 없으면 생성해 줄 것!

}

$newPath = $uploadDir.urlencode($upFile.".".$filename_ext);  //새로 생성된 파일의 경로

@move_uploaded_file($tmp_name, $newPath);  //tmp경로에도 파일을 추가해줌


img_limit_resize($newPath,680);  //이미지사이즈 제한


//이미지경로가 출력될 태그부분(textarea안)

$url .= "&bNewLine=true";

$url .= "&sFileName=".urlencode(urlencode($upFile.".".$filename_ext));

$url .= "&sFileURL=http://~파일경로~/Editor/upload/".urlencode(urlencode($upFile.".".$filename_ext));


}

}

// FAILED

else {

$url .= '&errstr=error';

}


photo_uploader/popup/file_uploader_html5.php


$file = new stdClass;

$file->name = rawurldecode($headers['file_name']);

$file->size = $headers['file_size'];

$file->content = file_get_contents("php://input");


$wdate = time();


$filename_ext = strtolower(array_pop(explode('.',$file->name)));

$allow_file = array("jpg", "png", "bmp", "gif"); 

$upFile = "aaa".$file->name[0].$wdate;

if(!in_array($filename_ext, $allow_file)) {


echo "NOTALLOW_".$file->name;

} else {


$uploadDir = '../../upload/';

if(!is_dir($uploadDir)){

mkdir($uploadDir, 0777);

}

$newPath = $uploadDir.iconv("utf-8", "cp949", $upFile.".".$filename_ext);

if(file_put_contents($newPath, $file->content)) {

$sFileInfo .= "&bNewLine=true";

$sFileInfo .= "&sFileName=".$upFile.".".$filename_ext;

$sFileInfo .= "&sFileURL=http://~파일경로~/Editor/upload/".$upFile.".".$filename_ext;

}

echo $sFileInfo;


}


파일수정하고 에디터에 이미지를 등록해보면~






이렇게 보니 간단한 것을..나는 이거에 목을 매달고 오후업무의 80퍼를 쏟아부었다. 쒜뜨

머리가나쁘면 손발이 고생하는건 진리였어lol!!!!


내가 헤매고 어리버리 멘붕했던 이유를 생각해보니 php 함수를 아직 많이 익히지 못해서 인듯...

아아.. 주말엔 공부를 해야하나.ㅜㅜ

근데 나 또 이번주말에 꽃놀이 갈껀데잉. 망해따.ㅋㅋㅋㅋㅋㅋ


내가 여기서 헤맸던 php함수들은 따로 정리해서 포스팅 고고!


댓글
  • 프로필사진 익명 비밀댓글입니다 2014.07.07 13:50
  • 프로필사진 신도링 앗 여러이미지를 동시에 등록하는 경우를 생각못했네요.
    그래서 이것저것 찾아보니
    $upFile = "aaa".$file->name[0].$wdate;
    이부분에서 "aaa"를 랜덤으로 생성해 주는것도 하나의 방법이 될듯합니다
    저도 실력이 부족한지라 댓글로 정확하고 자세하게 설명을 드리진 못하는점 죄송해요.ㅠㅠ
    php 파일명 랜덤으로 구글링 해보시면 알파벳을 배열로 저장해서 랜덤으로 파일명을 지정해주거나 하는 여러가지 방식이 나오네요^^
    조만간 시간되는대로 여러장을 동시에 올릴때의 경우도 가능하도록 포스팅을 수정하겠습니다!
    부족한 소스인데 봐주시고 피드백해주셔서 감사해용ㅎㅎㅎ
    2014.07.08 14:27 신고
  • 프로필사진 스냅홀릭 덕분에 참조하고 갑니다.

    신도링님 말씀하신 aaa 부분을 랜덤화 하여 아래와 같이 정리하여 보았습니다.

    //일반용
    $wdate = date('Ymd_His_',time()); // 포멧 지정하여 시간값 저장
    $ExtractFileName = (explode('.',$name)); // 파일명만 추출
    $ExtractFileName[0] = $wdate.uniqid(); // 시간값(추후 게시글 타임싱크 편의성고려) + 유니크 아이디로 파일명 생성(긴파일이름 및 한글문제 탈피)
    $name = $ExtractFileName[0].".".$filename_ext; // 생성된 파일명 과 확장자를 다시 변수에 삽입

    //html5용
    $wdate = date('Ymd_His_',time()); // 포멧 지정하여 시간값 저장
    $ExtractFileName = (explode('.',$file->name)); // 파일명만 추출
    $ExtractFileName[0] = $wdate.uniqid(); // 시간값(추후 게시글 타임싱크 편의성고려) + 유니크 아이디로 파일명 생성(긴파일이름 및 한글문제 탈피)
    $file->name = $ExtractFileName[0].".".$filename_ext; // 생성된 파일명 과 확장자를 다시 변수에 삽입

    동작 확인은 하였으나, 제가 웹쪽 프로그래머가 아니라서 올바른 응용이 아닌 삽질일 수 있음을 참조하세요. -_-;;
    2015.01.06 10:56 신고
댓글쓰기 폼