2013-06-26 2 views
2

제출 버튼을 클릭 할 때 파일을 자동으로 다운로드하는 코드는 다음과 같습니다. 모든 것이 제대로 작동하는 것 같습니다. 파일을 rigth 형식, 올바른 크기, 올바른 이름으로 다운로드하지만 내가 을 열려고하면 오류가 발생합니다. 파일을 읽을 수 없으므로 문제 일 수 있습니까?PHP 파일 다운로드 문제 - 읽을 수 없습니다

$file=mysql_fetch_assoc($sel); 
$file=$file['downloadlink']; 
header('Content-Type: "application/octet-stream"'); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize($file)); 
header("Content-disposition: attachment; filename=\"".basename($file)."\""); 
readfile($file); 
+0

올바른 확장명으로 저장된 파일입니까? 예 : '.docx' vs'.doc' – verbumSapienti

+0

당신이 파일을 망칠 수있는 유일한 방법은 전송 인코딩입니다 –

+0

예, 파일은 올바른 확장자로 저장됩니다. – bodesam

답변

2

당신은 readfile() 의견에서이 기능을 조정 시도 할 수 :

function DownloadFile($file) { // $file = include path 
    if(file_exists($file)) { 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename='.basename($file)); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 
     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 
    } 
} 
+0

와우! 고마워, 내 코드에 누락 된 줄을 추가했는데 이제는 모두 정상입니다. pdf와 zip을 모두 열 수 있습니다. – bodesam

0

나는이에 대한 추가 있습니다. 파일 크기가 너무 크면 우리는 전혀 열 수없는 빈 파일을 다운로드합니다. 그것은 'readfile'함수 자체에 문제가되지 않습니다. 문제는 대용량 파일을 메모리로 읽는 것입니다. 따라서 이러한 종류의 문제를 방지하려면 출력 버퍼를 끄기 위해 'readfile'함수에 'ob_end_flush()'를 사용해야합니다.

이 팁을 사용하면 시간을 절약 할 수 있습니다. :)