2016-08-03 2 views
0

docx를 생성하고 서버에서 다운로드하고 있습니다.docx 파일을 다운로드하는 중 오류가 발생했습니다.

private static function downloadFile($fileDir) 
{ 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename=' . basename($fileDir)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($fileDir)); 
    readfile($fileDir); 
} 

이것은 저장 기능입니다. 서버에서 임시 디렉토리에 파일을 열면 작동합니다. 그러나 다운로드 후 "파일이 손상되었습니다."라는 오류 메시지가 나타납니다. 나는 모든 파일을 복원하고 파일을 복원하려고합니다. 오류가 어디 있습니까?

+2

출력 스트림에 다른 것을 표시하거나 표시하는 것일 수도 있습니다. –

+0

파일을 16 진수 편집기에서 열고 파일의 시작과 끝 부분에 "zippish"가 아닌 것을 찾으십시오. PHP의 다른 출력 (예 : 경고)은 해당 파일의 일부가되어 손상된 것처럼 보입니다. –

답변

5

readfile($fileDir) 전에 출력 버퍼를 지우기 (지우기) 및 플러시하려면 ob_clean()flush()을 실행하십시오. 웹 서버의 버퍼링 방식을 재정의 할 수 없습니다

플러시() 그리고 브라우저에서 모든 클라이언트 측 버퍼링에 영향을주지 않습니다 :

PHP's manual about flush()에서 인용. 또한 PHP의 사용자 공간 출력 버퍼링 메커니즘에도 영향을 미치지 않습니다. 즉, ob 출력 버퍼를 사용하는 경우 ob_flush() 및 flush()를 호출하여 ob 출력 버퍼를 플러시해야합니다.

+1

thx, 매우 간단했습니다! – Dev

+0

@ Vadim.K. 예를 들어 텍스트 편집기에서 손상된 파일을 열어서 확인할 수 있습니다. 메모장 – DarkBee

관련 문제