Extra Form
PHP PHP 7.4
CMS XpressEngine

안녕하십니까?

 

해외에서 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여개가 됩니다.

 

읽어주셔셔 감사합니다.

  • ?
    혹시 디비 버전이 달라서 그런게 아닐까요?
  • profile

    새로 올리는 파일은 멀쩡하고 과거 파일만 깨진다면, 그리고 php를 통하지 않고 해당 경로의 파일을 직접 다운받아도 마찬가지라면, 업로드/다운로드를 담당하는 php 파일보다는 서버 이전 과정에 문제가 있어서 파일 자체가 깨진 상태로 저장되어 있을 가능성이 높습니다. 예를 들어 파일질라로 다운받을 때 바이너리 모드가 아닌 아스키 모드로 받았다거나... 새 호스팅에 올릴 때 아스키 모드로 올렸다거나...

     

    깨진 파일 샘플이라도 몇 개 공개해 주시면 간단하게 알 수 있을 것 같네요.

  • profile profile

    화일질라로 다운받을 때 전송 유형은 "자동"으로 되어 있어서 어떤 모드로 받았는지 잘 모르겠습니다.

     

    처음 것, be1932a6efeb118f861dda8f655a1697은 폴더에 있는 것이구요,

    20210103.pdf는 다운 받은 것입니다.

    감사합니다.

  • profile ?

    확인해보니까 역시 아스키 모드로 받으신 것 같네요.
    파일을 살리는 방법은... 글쎄요 파일이 달랑 하나 정도고 원래 파일의 크기 정보라도 알 수 있다면 진짜 개노가다를 통해서 살려볼 수도 있는데... 자동으로 여러개의 파일을 살리는 방법은 안타깝지만 없습니다... 혹시 닷홈에서 백업본을 아직 삭제하지 않았을 가능성에 올인하시고 빨리 닷홈에 전화해보세요. 아니 직접 찾아가시는 편이 확실하겠습니다.

  • ? profile
    감사합니다.
  • ? profile

    files 폴더를 살펴보니
    이미지들은 확장자가 다 붙어 있어서 자동으로 다운 받는데
    화일들은 확장자가 없어 임의로 아스키로 받나 봅니다.

    테스트 해보니 확장자를 넣으면 화일질라에서 어떤 형태로든 잘 받는데 확장자를 제거하니 이스키로 받네요.

    왜 이미지는 확장자를 넣고 화일은 제거한 후에 홀더에 넣었을까요? ㅠㅠ

  • ? profile

    20210911_115416.png

    이렇게 되어있더라구요. ㅠㅠ

  • profile profile

    2021년 현재 아스키 모드가 필요한 경우는 사실상 없다시피하고, 심지어 아스키 모드를 지원하지 않는 FTP 서버도 늘어나고 있으니, 맨 위에 있는 설정에서 항상 바이너리만 쓰도록 설정하셔도 무방합니다. 이건 파일질라가 잘못한 것 같네요. 아마 저 설정 기본값이 20년째 그대로일 겁니다. ㅡ.ㅡ

    바이너리 파일의 확장자를 제거하는 이유는 아마 보안 때문일 것입니다. 서버 운영체제나 설정 상태에 따라 cgi, pl, py, sh, exe, com, bat, msi 등 굉장히 다양한 확장자들이 실행파일로 간주될 수 있는데, 일일이 막아주기는 불가능에 가까우니 안전성이 검증된 이미지 외에는 모두 확장자를 지운 상태로 저장하고, PHP에서 다운로드할 때 원본 확장자를 다시 붙여주는 것입니다.

  • profile profile
    감사합니다.
    보안때문일 것이라고 짐작은 했지만 그 이유는 생각해보지 않았습니다.
    도움이 되었습니다.