2012-06-11 11 views
0

这已经发布,但我试过很多解决方案,发现SO多(是这样的:http://davidwalsh.name/php-force-download强制文件下载使用PHP:损坏的文件,尝试了好几种解决方案

我基本上有这样的:

{  
    $filePath = '../public/myfile.png'; 
    $fileName = basename($filePath); 
    $fileSize = filesize($filePath); 


    if (!is_file) { 
     die("File not found"); 
    } else {       
     header("Content-Description: File Transfer"); 
     header('Content-Type: application/octet-stream'); 
     header("Content-Disposition: attachment; filename= " . $fileName); 
     header("Content-Transfer-Encoding: binary"); 
     readfile($filePath); 
    } 
} 

文件被识别和下载,但.PNG文件是空的,.DOC文件已损坏(Word要求我修复文件,那么没关系)。我也尝试过PDF,并没有问题。

我trues把所有排序的选项(附注,缓存控制,过期,内容长度等),还是下载文件,但在某种程度上破坏......

你有没有过我的问题?请考虑我在IIS 7.5

在此先感谢

+3

如果您尝试使用文本编辑器打开损坏的文件之一并查看是否有打印错误 –

+0

错误的大小?这可能是腐败的主要原因;另一个是php的警告 –

回答

8

开放与像Notepad++纯文本编辑器下载的文件。在顶部你会发现一个PHP错误通知,它会告诉你出了什么问题。

错误可能是“会话已发送”。然后在脚本的开头添加ob_start();

+1

哦,我的...“使用未定义的常量is_file - 假设'is_file'”,我忘记了函数中的文件路径!好吧,我需要一站... :-) 非常感谢,你刚刚救了我的一天! – Ivan

+2

您可能还想使用这个技巧来查看文件开头是否有空格。它会阻止图像正确加载除photoshop之外的所有内容。 –