업로드한 파일을 s3로 원본과 리사이즈한파일을 업로드후 서버에서는 삭제하도록 작업하고 있습니다.
unlink($resizeimg); // resize img unlink($target_file); // upload img
원본이미지와 리사이즈이미지가 s3에 업로드가 되었다면 두개의 값을 불러와 서버에서 삭제하도록 작업을 하고있습니다.
그런데 리사이즈 이미지는 잘 지워지는데 error_log를 찍어보니원본이미지삭제함수가 두번불러와져
fopen(uploadtest/1.jpg): failed to open stream: No such file or directory 이런식으로 에러가 뜹니다.
물론 서버에서 삭제되었는데 또불러왔으니 이런 에러가 뜨는건 당연한거지만
대체 어디가 반복문으로 돌고있는지 모르겠습니다.
그래서 /uploadtest/* 이런식으로 파일내의 모든파일을 삭제할수있도록 할수있는 방법이있나요?
나름찾아보는데 잘모르겠네요 ,, 선배님들 도움부탁드리겠습니다.
file_exists 를 이용하여 파일이 존재하면 삭제하시고
또는 unlink 앞에 @ 를 붙여서 에러를 출력안하는 방법도 있습니다.
파일 패턴으로 삭제하는 방법은 아래 php manual 을 참조하세요
http://php.net/manual/kr/function.unlink.php
@kaido
감사합니다! 먼저 @unlink를 사용하였지만 웹페이지에서는 여전히 같은에러가 뜨고있습니다.
그다음으로 알려주신 chattr을 사용하였습니다 unlink('uploadtest/'); 이렇게사용하였더니 파일을 못찾는다고 나와 rmdir('uploadtest/'); 이렇게 바꿔 사용하였더니 디렉토리가 비어있지않아 삭제가 불가능하다고 나오고있습니다.
제가 폴더삭제를 맞지않게 하고있는건가요? ㅜㅜ
@이제다시
답변감사합니다! @unlink를 사용하였지만 웹페이지에서는 여전히 같은에러가 뜨고있습니다.
if(file_exists($resizeimg)){
unlink($resizeimg);
}elseif(file_exists($file_path)){
unlink($file_path);
}
이런식으로 반복문을 돌려서 확인하고 삭제하고 확인하고 삭제하려는 코드를 실행했으나.. 역시나 원본파일은 삭제가안되네요.. 혹시 제가 잘못코딩하고있다면 말씀해주시면 감사히생각하며 수정하겠습니다 ㅠㅠ
기본적으로 if 문이 true 에 해당하면 다음에 해당하는 elseif 구문은 실행되지 않습니다.
에러 메세지로 볼때 해당경로에 파일이 없다는 오류인데
해당 경로에 파일이 존재하는지 확인하시기 바랍니다.
파일위치를 상대경로로 잡으시면 현재 실행되는 파일의 위치부터 상대경로로 동작하니
$_SERVER['DOCUMENT_ROOT'] 를 이용하여 웹루트 부터 해당 파일의 폴더까지 절대경로로 위치를 잡아보시기 바랍니다.
@이제다시
답변감사합니다! upload동시에 반복문을 돌리면 원본파일과 수정파일을 계속 찾을것이라고 착각을했네요 ㅎㅎ..
확인해보니 코드상단에 foreach문이 잘못돌고 있어 삭제파일을 두번씩불러오고있더라구요.
수정해서 해결했습니다. 답변주신 모든분들 감사합니다!
네. 폴더 안에 파일 전체 삭제가 있습니다.
이전에 작업하던 프로젝트에 적용한적 있습니다.
저도 동일하게 S3에만 저장 하면 되어서, 업로드하고 나서 S3에 업로드하고 난 다음에 업로드한 파일들은 통째로 지우는 로직을 넣었습니다.
unlink 에러는 일단 @unlink 으로 막아두시는것이 좋을것 같습니다.
@ 남발 하는것은 좋지 않지만 unlink 정도에는 exception 처리 느낌 이라서 허용 범위라고 생각 합니다.
아 전체 삭제 부분에서 꼼수도 있습니다.
chattr 를 이용해서 해당 폴더는 삭제 금지를 걸어 놓고 폴더 삭제를 걸면 해당 폴더 안에 파일들만 삭제됩니다.
chattr 사용법은 아래의 포스팅을 확인해보세요
http://cikorea.net/bbs/view/tip?idx=19404&lists_style=