2009-09-13 7 views
2

안녕하세요, 저는 현재 일부 PHP에서 작동하고 있습니다. osx - apache에 대한 zend 프레임 워크 프로젝트입니다. 문제는 내가 다운로드 한 파일이 손상되어 파일의 크기가 5.4 kb 인 PHP 응용 프로그램을 사용하여 일부 파일을 강제로 다운로드하려고 할 때입니다. 나는 내 코드에서 많은 변화를 시도했고 다운로드를 강요하기 위해 일부 클래스를 사용했지만 문제는 여전히 동일하다! 나는 내 컨트롤러의 액션에서 강제 다운로드를 사용한다고 말해야한다. 재기록 또는 이와 비슷한 것이 파일 다운로드에 영향을 미칩니 까?PHP Force 다운로드 손상된 파일 반환

header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file["files_url"])); 
    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["files_url"])); 
    ob_clean(); 
    flush(); 
    readfile($file["files_url"]); 
    exit;*/ 

그리고 내가 사용하는 클래스 :

$download = new Download($file["files_url"],$file["files_title"],"on",20); 
    $download->download_file(); 

BF_Download

그리고 :

$zip = new zip_file("../".$file["files_title"].".zip"); 

    $zip->set_options(array('inmemory' => 1, 'recurse' => 0, 'storepaths' => 0)); 
    $zip->add_files($file["files_url"]); 
    $zip->create_archive(); 
    $zip->download_file();*/ 
+0

다운로드 한 파일의 내용을 보았습니까? 어딘가에 오류 메시지가 삽입되어있을 수 있습니다. –

답변

2

그래, 난 dcaunt에서 마지막 의견의 도움으로 문제를 발견, 사실 난 그냥 출력 파일의 이진 소스를 살펴보고 첫 줄에 작은 개행 문자와 공간이 있다는 것을 발견했습니다 그래서 파일을 지우면 파일이 정상 상태로 돌아가고 읽을 수있게됩니다. 그래서 나는 내 컨트롤러에서 내 PHP 스크립트 태그 "?>"의 끝을 제거하기 위해 decieded 그 공간을 파괴하기 위해, 그리고 출력의 내용에 그들을 보내지 않는 PHP가 발생합니다. 어떤 의견이라도 고맙습니다. :)

+0

좋은 발견! 그곳에 갔다가 그 일을 끝내고 (그리고 시간 낭비!) – Steve

4

는 웹 페이지에 바이너리 데이터로 파일을 볼보십시오

은 기본 코드 . 무슨 일이 일어날 수 있습니다 일부 PHP 오류 몰래 출력 및 부패입니다.

콘텐츠 유형 헤더를 건너 뛰고 순수한 데이터 만 살펴보십시오.

여전히 표시되지 않으면 그대로 유지하고 오류 로그를 확인하십시오.

+0

php 에러가없는 것 같고 바이너리 뷰조차도 작동 중이다. (필자는 그것이 옳았는지 여부는 말할 수 없지만 의심 할 여지없이 파일의 바이너리 뷰이며 php 에러는 아니다). PHP 및 아파치 오류 로그는 오류를 표시하지 않습니다. – Farid

0
내가 강력하게 파일을 전송이 Action Helper을 사용하는 것이 좋습니다

- 아파치 sendfile을은이 메모리에서 데이터 또는 디스크에있는 파일을 전송하고 쉽게 이름 sendfile을에도 불구하고 캐싱 및 콘텐츠

에 대한 옵션을 설정할 수 있습니다 할 수없는 요구 사항.

+0

의견을 보내 주셔서 감사합니다. 도우미를 사용했지만 결과는 같습니다. 여전히 다운로드 한 파일이 손상되었습니다! – Farid