2012-01-13 7 views
3

무엇이 잘못 되었는가를 알아 내려고했지만 이미지를 다운로드하고 열려고 할 때마다 파일이 손상되었다고 말합니다.파일 다운로드가 손상됨 - 헤더

$ h는 데이터베이스에서 가져온 경로이며, $ h는 페이지의 이미지를 성공적으로 표시하지만 다운로드 할 이유가 없습니다. 어떤 아이디어?

header("Pragma: public"); // required 
header("Cache-Control: private",false); // required for certain browsers 
header('Content-Length: '. filesize("../".$h)); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: inline; filename="'.md5($h).$ext.'"'); 
header('Content-Transfer-Encoding:binary'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 

readfile("../".$h); 
+0

다운로드 한 파일을 저장하고 서버의 내용과 비교해 보셨습니까? –

+0

헤더 데이터가 잘못된 것처럼 보입니다. md5 해시 및 파일 크기를 살펴보십시오. –

+0

예, 이미지를 마우스 오른쪽 버튼으로 클릭하면 정상적으로 다운로드됩니다. 흠, 나는 그것이 헤더라고 가정했지만, 그걸로 무엇을 찾을 수 없습니다. 해쉬를 제거하고 그것이 무엇을하는지 봅니다. – Jason

답변

7

어쩌면 당신의 ReadFile을 행하기 전에 다음 두 명령을 추가하려고합니다.

ob_clean(); 
flush(); 
readfile($file); 

이 줄은 readfile의 PHP 문서 예제에 있습니다.

+1

고마워요! ob_clean()만이 나를 위해 트릭을했습니다. 플러시를 통해 방금 내용이 표시되었습니다. – Aiphee

+0

예, flush()도 제거해야했습니다. – Pierre

2

이 시도 :

$localPath = realpath("../$h"); 
if (!file_exists($localPath)) { 
    exit("Cannot find file located at '$localPath'"); 
} 

header('Pragma: public'); // required 
header('Content-Length: '.filesize($localPath)); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename="'.md5($localPath).'.'.$ext.'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0', false); 
header('Cache-Control: private', false); // required for certain browsers 

readfile($localPath); 
exit; 
+0

그것을 시도하고 다운로드하지만 여전히 열 수 없습니다. 파일 사용 권한이라고 생각하십니까? Wamp에서 코드를 실행하면 차이가 발생합니다. – Jason

+0

가장 가능성있는 대답은 ''태그 앞뒤에 파일의 앞/뒤에 공백이 있음을 나타냅니다. 이 스크립트는 스크립트의 맨 처음과 맨 마지막 문자 여야합니다. '?>'닫는 태그는 안전하게 생략 할 수 있습니다. 위의 코드 앞에서'echo','print' 등을 호출 할 수도 있습니다 -이 작업을 수행 할 때 파일 데이터와 별도로 출력 버퍼에 아무 것도 쓸 수 없다는 것을 기억하십시오. 또한'readfile()'호출 후에 즉시'exit' /'die' **를 호출했는지 확인하십시오. – DaveRandom

+0

Ahhh 얼마나 어리 석 었니? 공백이 있었나요?> 꿈처럼 지금 작동합니다. 감사합니다. DaveRandom – Jason

관련 문제