서버 이전후 첨부화일이 열리지 않습니다.
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 7.4 |
안녕하십니까?
해외에서 XE1을 사용하고 있습니다. 사용 Version은 1.11.5입니다.
국내 dothome을 사용하다가 여러가지 어려운 점이 있어서 로컬 서비스로 옮겼습니다.
fileziller로 다운 받고, db export/import하여 이전 완료하였습니다.
사이트에 올린 그림들 다 정상으로 보이고, file upload/download 다 잘됩니다.
그런데....
서버 이전에 첨부했던 문서들이 다운로드는 정상적인데 열리지 않습니다. 열리면 깨져서 보입니다.
서버 이전후 upload한 문서는 이상이 없습니다.
이상해서, DB files Table에서 화일 정보 확인 후에 files/attach/binaries의 해당 폴더에서 화일을 내려받아 확장자를 주고 열어보면,
서버 이전의 첨부 문서는 깨지고
서버 이전 후에 문서는 다 정상적으로 열립니다.
이게 어찌된 일인가요?
해당 모듈이 modules/file/file.controller.php 인거 같은데, 제가 아무리 궁리해봐도 왜 그런지 읽어낼 수 없습니다.
사진은 그대로 저장하고 첨부 문서는 별도의 암호화 과정을 거치는지 알 수 없네요.
첨부된 binary file을 살리는 방법은 없을까요? pdf/hwp/doc의 첨부 화일 수가 400여개가 됩니다.
읽어주셔셔 감사합니다.
댓글 9
새로 올리는 파일은 멀쩡하고 과거 파일만 깨진다면, 그리고 php를 통하지 않고 해당 경로의 파일을 직접 다운받아도 마찬가지라면, 업로드/다운로드를 담당하는 php 파일보다는 서버 이전 과정에 문제가 있어서 파일 자체가 깨진 상태로 저장되어 있을 가능성이 높습니다. 예를 들어 파일질라로 다운받을 때 바이너리 모드가 아닌 아스키 모드로 받았다거나... 새 호스팅에 올릴 때 아스키 모드로 올렸다거나...
깨진 파일 샘플이라도 몇 개 공개해 주시면 간단하게 알 수 있을 것 같네요.
화일질라로 다운받을 때 전송 유형은 "자동"으로 되어 있어서 어떤 모드로 받았는지 잘 모르겠습니다.
처음 것, be1932a6efeb118f861dda8f655a1697은 폴더에 있는 것이구요,
20210103.pdf는 다운 받은 것입니다.
감사합니다.
확인해보니까 역시 아스키 모드로 받으신 것 같네요.
파일을 살리는 방법은... 글쎄요 파일이 달랑 하나 정도고 원래 파일의 크기 정보라도 알 수 있다면 진짜 개노가다를 통해서 살려볼 수도 있는데... 자동으로 여러개의 파일을 살리는 방법은 안타깝지만 없습니다... 혹시 닷홈에서 백업본을 아직 삭제하지 않았을 가능성에 올인하시고 빨리 닷홈에 전화해보세요. 아니 직접 찾아가시는 편이 확실하겠습니다.
files 폴더를 살펴보니
이미지들은 확장자가 다 붙어 있어서 자동으로 다운 받는데
화일들은 확장자가 없어 임의로 아스키로 받나 봅니다.
테스트 해보니 확장자를 넣으면 화일질라에서 어떤 형태로든 잘 받는데 확장자를 제거하니 이스키로 받네요.
왜 이미지는 확장자를 넣고 화일은 제거한 후에 홀더에 넣었을까요? ㅠㅠ
이렇게 되어있더라구요. ㅠㅠ
2021년 현재 아스키 모드가 필요한 경우는 사실상 없다시피하고, 심지어 아스키 모드를 지원하지 않는 FTP 서버도 늘어나고 있으니, 맨 위에 있는 설정에서 항상 바이너리만 쓰도록 설정하셔도 무방합니다. 이건 파일질라가 잘못한 것 같네요. 아마 저 설정 기본값이 20년째 그대로일 겁니다. ㅡ.ㅡ
바이너리 파일의 확장자를 제거하는 이유는 아마 보안 때문일 것입니다. 서버 운영체제나 설정 상태에 따라 cgi, pl, py, sh, exe, com, bat, msi 등 굉장히 다양한 확장자들이 실행파일로 간주될 수 있는데, 일일이 막아주기는 불가능에 가까우니 안전성이 검증된 이미지 외에는 모두 확장자를 지운 상태로 저장하고, PHP에서 다운로드할 때 원본 확장자를 다시 붙여주는 것입니다.
보안때문일 것이라고 짐작은 했지만 그 이유는 생각해보지 않았습니다.
도움이 되었습니다.