스마트에디터 파일중복 방지/ 사진첨부시 사진이름 중복방지 prevent duplication of image name in smart editor
게시판을 만들때 네이버 스마트데이터를 이용하는 경우가 많은데요, 아래 그림과 같이 글꼴이나 굵기 색상등을 편집하기 좋고 무료로 제공되기 때문에 사용하기 편리합니다
다만, 스마트에디터의 사진추가를 이용할 경우, 문제가 발생할 수 있습니다.
스마트에디터를 설치한 후에 사진을 첨부해보면, 기본적으로 myPhoto 폴더로 사진이 업로드 되게 됩니다. 이는, nse_files/quick_photo_uploader/popup/ 폴더에 있는 FileUploader_html5.php 파일에 아래와 같이 경로가 명기되어 있습니다.
$newPath = $_SERVER['DOCUMENT_ROOT'].'/nse/myPhoto/'.iconv("utf-8", "cp949", $file->name);
이미 업로드된 파일과 동일한 이름의 파일을 업로드하는 경우
문제는 동일한 이름의 이미지를 서로다른 사람이 첨부할 경우 이미지 파일이 덮어씌워지기 때문에, 기존에 포스팅한 사람의 화면에 새로 포스팅한 사람의 이미지가 보여질 수 있다는 것입니다.
01.jpg 라는 파일이 이미 myPhoto 폴더에 업로드 되어있는데 다른 사람이 01.jpg 를 포스팅 하게되면, 기존의 01.jpg 파일이 새로 업로드된 01.jpg 로 바뀌게 되는겁니다.
이를 방지하기 위해서는 nse_files/quick_photo_uploader/popup/ 폴더에 있는 FileUploader_html5.php 을 수정해 주어야 합니다.
파일중복(사진중복)을 피하기 위해서 현재의 microtime 값을 읽어서 이를 파일명앞에 붙여주는 방식을 사용합니다.
// START : 파일중복방지코드
$addName = strtotime(date("Y-m-d H:i:s")); // 현재날짜 시간 초
$milliseconds = round(microtime(true) * 1000); // 밀리초 구하기
$addName .= $miliseconds; // 파일이름에 밀리초 추가하기
$file->name = $addName . "_" . $file->name;
// END : 파일중복방지코드
위 코드가 추가된 전체 FileUploader_html5.php 의 내용은 다음과 같습니다.
<?php
$sFileInfo = '';
$headers = array();
foreach ($_SERVER as $k => $v){
if(substr($k, 0, 9) == "HTTP_FILE"){
$k = substr(strtolower($k), 5);
$headers[$k] = $v;
}
}
$file = new stdClass;
$file->name = rawurldecode($headers['file_name']);
$file->size = $headers['file_size'];
$file->content = file_get_contents("php://input");
// START : 파일중복방지코드
$addName = strtotime(date("Y-m-d H:i:s")); // 현재날짜 시간 초
$milliseconds = round(microtime(true) * 1000); // 밀리초 구하기
$addName .= $miliseconds; // 파일이름에 밀리초 추가하기
$file->name = $addName . "_" . $file->name;
// END : 파일중복방지코드
$newPath = $_SERVER['DOCUMENT_ROOT'].'/nse/myPhoto/'.iconv("utf-8", "cp949", $file->name);
if(file_put_contents($newPath, $file->content)) {
$sFileInfo .= "&bNewLine=true";
$sFileInfo .= "&sFileName=".$file->name;
$sFileInfo .= "&sFileURL=/nse/myPhoto/".$file->name;
}
echo $sFileInfo;
?>
아울러 html5 가 아닌경우에는 FileUploader.php 파일도 수정해 주어야 합니다.
아래에 수정코드가 추가된 전체 내용이 있습니다
<?php
//기본 리다이렉트
echo $_REQUEST["htImageInfo"];
$url = $_REQUEST["callback"] .'?callback_func='. $_REQUEST["callback_func"];
$bSuccessUpload = is_uploaded_file($_FILES['Filedata']['tmp_name']);
if (bSuccessUpload) { //성공 시 파일 사이즈와 URL 전송
$tmp_name = $_FILES['Filedata']['tmp_name'];
$name = $_FILES['Filedata']['name'];
// START : 파일중복방지코드
$addName = strtotime(date("Y-m-d H:i:s")); // 현재날짜 시간 초
$milliseconds = round(microtime(true) * 1000); // 밀리초 구하기
$addName .= $miliseconds; // 파일이름에 밀리초 추가하기
$name = $addName . "_" . $name;
// END : 파일중복방지코드
$new_path = "../upload/".urlencode($_FILES['Filedata']['name']);
@move_uploaded_file($tmp_name, $new_path);
$url .= "&bNewLine=true";
$url .= "&sFileName=".urlencode(urlencode($name));
//$url .= "&size=". $_FILES['Filedata']['size'];
//아래 URL을 변경하시면 됩니다.
$url .= "&sFileURL=http://test.naver.com/popup/upload/".urlencode(urlencode($name));
} else { //실패시 errstr=error 전송
$url .= '&errstr=error';
}
header('Location: '. $url);
?>
아래 블로그 글을 참고하였습니다
ico 파일을 png로 변경, 또는 ico 파일을 jpg / gif 로 변경하기 (0) | 2019.08.24 |
---|---|
카카오지도/ 다음지도/ 네이버지도 API 등록하기, 유료서비스 무료서비스 구분 ... kakao지도편... (0) | 2019.07.03 |
모션그래픽 애니메이션 프로그램 Express Animate (1) | 2018.12.05 |
아마존웹서비스 AWS 인스턴스에 접속하여 FTP 파일전송 WinSCP (0) | 2018.09.10 |
아마존웹서비스 AWS 인스턴스 연결 putty SSH 접속 (0) | 2018.09.10 |
댓글 영역