PHP下载除图像和DOCX以外的所有文件都已损坏

时间:2012-12-23 15:18:24

标签: php excel pdf download

我遇到了一个我已经工作了一段时间的项目的严重问题。

用户将文件上传到课程。上传脚本采用文件名,用下划线替换空格,删除文件扩展名,添加4位数字,然后重新添加扩展名。

但是,文件会完美地上传到服务器(直接从“uploads”文件夹打开时,它们就可以了)。当下载到用户的计算机时,除DOCX文件和图像外,文件全部损坏。

PDF,Excel(xlsx)和powerpoint(pptx)在打开下载的文件时给出错误消息:“文件已损坏且无法打开”

我必须下载的代码是:

<?php
class download extends Controller {

public function resource ($filename)
{

    $filepath = realpath('./uploads/resources/courses/' . $filename);

    header('Content-type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Pragma: no-cache');

    readfile($filepath);

}

}

这是一个MVC,所以这就是为什么它在一个类中,$ filename是从文件名的$ _GET变量中检索的。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

看起来你需要

header("Content-Length: " . filesize($filepath));
ob_clean();
flush();
readfile($file);
exit;

请参阅:How to Automatically Start a Download in PHP?

另请参阅:Corrupted .docx download using phpdocx

答案 1 :(得分:0)

您确定下载的文件的文件名中没有空格或其他特殊字符吗?因为当文件名中有空格或其他特殊字符时会发生这样的问题。