제목 | unlink()로 폴더내의 모든파일 삭제 질문입니다. | ||
---|---|---|---|
카테고리 | CIBOARD | ||
글쓴이 | 공부가필요한 | 작성시각 | 2018/03/22 09:54:38 |
|
|||
업로드한 파일을 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/* 이런식으로 파일내의 모든파일을 삭제할수있도록 할수있는 방법이있나요? 나름찾아보는데 잘모르겠네요 ,, 선배님들 도움부탁드리겠습니다. |
|||
태그 | unlink | ||
다음글 | 네이티브앱 api를 만들려고합니다. 인증토큰 발생 및 ... (2) | ||
이전글 | 외부에서 curl 로 보네는 데이터를 받고 싶습니다. (4) | ||
kaido
/
2018/03/22 10:20:59 /
추천
0
|
이제다시
/
2018/03/22 10:23:11 /
추천
0
file_exists 를 이용하여 파일이 존재하면 삭제하시고 또는 unlink 앞에 @ 를 붙여서 에러를 출력안하는 방법도 있습니다.
파일 패턴으로 삭제하는 방법은 아래 php manual 을 참조하세요 |
공부가필요한
/
2018/03/22 11:02:57 /
추천
0
@kaido 감사합니다! 먼저 @unlink를 사용하였지만 웹페이지에서는 여전히 같은에러가 뜨고있습니다. 그다음으로 알려주신 chattr을 사용하였습니다 unlink('uploadtest/'); 이렇게사용하였더니 파일을 못찾는다고 나와 rmdir('uploadtest/'); 이렇게 바꿔 사용하였더니 디렉토리가 비어있지않아 삭제가 불가능하다고 나오고있습니다. 제가 폴더삭제를 맞지않게 하고있는건가요? ㅜㅜ @이제다시 답변감사합니다! @unlink를 사용하였지만 웹페이지에서는 여전히 같은에러가 뜨고있습니다. if(file_exists($resizeimg)){ unlink($resizeimg); }elseif(file_exists($file_path)){ unlink($file_path); }
이런식으로 반복문을 돌려서 확인하고 삭제하고 확인하고 삭제하려는 코드를 실행했으나.. 역시나 원본파일은 삭제가안되네요.. 혹시 제가 잘못코딩하고있다면 말씀해주시면 감사히생각하며 수정하겠습니다 ㅠㅠ |
이제다시
/
2018/03/22 12:42:54 /
추천
0
기본적으로 if 문이 true 에 해당하면 다음에 해당하는 elseif 구문은 실행되지 않습니다. 에러 메세지로 볼때 해당경로에 파일이 없다는 오류인데 해당 경로에 파일이 존재하는지 확인하시기 바랍니다.
파일위치를 상대경로로 잡으시면 현재 실행되는 파일의 위치부터 상대경로로 동작하니 $_SERVER['DOCUMENT_ROOT'] 를 이용하여 웹루트 부터 해당 파일의 폴더까지 절대경로로 위치를 잡아보시기 바랍니다. |
공부가필요한
/
2018/03/22 14:13:02 /
추천
0
@이제다시 답변감사합니다! upload동시에 반복문을 돌리면 원본파일과 수정파일을 계속 찾을것이라고 착각을했네요 ㅎㅎ.. 확인해보니 코드상단에 foreach문이 잘못돌고 있어 삭제파일을 두번씩불러오고있더라구요. 수정해서 해결했습니다. 답변주신 모든분들 감사합니다!
|
네. 폴더 안에 파일 전체 삭제가 있습니다.
이전에 작업하던 프로젝트에 적용한적 있습니다.
저도 동일하게 S3에만 저장 하면 되어서, 업로드하고 나서 S3에 업로드하고 난 다음에 업로드한 파일들은 통째로 지우는 로직을 넣었습니다.
unlink 에러는 일단 @unlink 으로 막아두시는것이 좋을것 같습니다.
@ 남발 하는것은 좋지 않지만 unlink 정도에는 exception 처리 느낌 이라서 허용 범위라고 생각 합니다.
아 전체 삭제 부분에서 꼼수도 있습니다.
chattr 를 이용해서 해당 폴더는 삭제 금지를 걸어 놓고 폴더 삭제를 걸면 해당 폴더 안에 파일들만 삭제됩니다.
chattr 사용법은 아래의 포스팅을 확인해보세요
http://cikorea.net/bbs/view/tip?idx=19404&lists_style=