2012-01-13 87 views
3

我一直在试图弄清楚什么是错误的,但每次下载图像并尝试打开它时,都会说文件已损坏。下载文件已损坏 - 标题

$ h是从数据库中拉出的路径,$ h显示页面上的图像,但我不明白为什么它不会下载。有任何想法吗 ??

​​
+0

您是否尝试保存下载的文件并将其与服务器上的内容进行比较? – 2012-01-13 16:12:53

+0

似乎你的标题数据不知何故不正确,看看md5散列和文件大小。 – 2012-01-13 16:15:07

+0

是的,我可以右键点击图片,它会下载罚款。嗯,我认为这是头,但无法找出最新情况。将删除散列并查看它的功能。 – Jason 2012-01-13 16:16:55

回答

7

也许尝试你的ReadFile行之前添加以下两个命令。

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

这些行在readfile中的PHP文档的示例中。

+1

谢谢! ob_clean()独自为我做了诡计。用冲洗它只是显示内容。 – Aiphee 2014-11-28 12:04:44

+0

是的,我还需要删除flush()。 – Pierre 2017-12-14 09:07:39

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 2012-01-13 16:27:07

+0

这里最可能的答案是您的文件中''标签之前或之后有一些前/后空格。这些应该是脚本中的第一个也是最后一个字符。您可以放心地忽略'?>'结束标记。在上面的代码之前,你也可以调用'echo','print'等 - 记住除了文件数据之外,你不能在输出缓冲区中写入任何内容。同时确保你在readfile()调用后立即调用'exit' /'die' **。 – DaveRandom 2012-01-13 16:36:59

+0

Ahhh是多么愚蠢,之后有一个空白空间现在像梦一样工作..感谢DaveRandom – Jason 2012-01-13 16:44:24