2010-07-18 8 views
1

저는 수년간 내 웹 사이트에서 강제로 다운로드 한 적이있는 PHP 스크립트가 있습니다. 그러나 지난 한 달 간 언젠가 작동이 멈추고 파일을 찾을 수없는 오류가 발생합니다. 이상한 점은 Firefox에서 오류 페이지의 소스를 보면 다운로드하려는 파일입니다. 그리고 거기에서 파일> 저장을하면 올바른 파일을 얻을 수 있습니다. 그래서 나는 스크립트가 서버에서 파일을 찾지 못하는 것이 문제가 아니라는 것을 알고 있습니다.강제 다운로드가 작동을 멈췄습니다.

헤더 설정 방법에 문제가 있습니까?

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private",false); 
header('Content-Type: application/octet-stream'); 
header('Content-Transfer-Encoding: Binary'); 
header('Content-length: '.filesize($file_url)); 
header('Content-disposition: attachment; filename="'.basename($file_url).'"'); 
readfile($file_url); 
+0

무엇이'$ file_url'의 값입니까? – Artefacto

+0

다운로드 할 파일의 경로입니다. 내가 게시 한 것은 다운로드를 시작하는 데 사용 된 코드입니다. 첫 번째 생각은 경로가 잘못되었다는 것을 알지만보기 소스가 아니며 올바른 파일을 저장하지 않습니다. – unholysampler

답변

0

나는이 일을하기 위해 부정 행위를 범했습니다. 다음

header("Location: $file_url"); //file_url is now the real url, not the path 

그리고

내가 사용하던 모든 MIME 유형이 application/octet-stream로 설정했다 확인의 cPanel을 사용했다.

1

이 기능을 사용해 볼 수 있습니까?

function force_download($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)); 
    readfile($file); 
    exit; 
} 
+0

죄송합니다, 같은 결과. – unholysampler

+1

주제를 벗어나, 파일을 제공하고 싶을 때 모두 포스트 체크 = 0 및 사전 체크 = 0을 추가하는 것은 무엇입니까? 이것은 실제로 아무것도하지 않는 것들 중 하나이며 복사하여 붙여 넣기 만하면됩니다 ... https://blogs.msdn.com/b/ie/archive/2006/06/01/613132.aspx – kander

+0

@unholysampler - Chrome에서 동일한 버그가 발생했기 때문에 Chrome 브라우저를 사용하고 있습니까? 헤더를 렌더링하지 못합니다. – Shubham

관련 문제