Php 下载docx文件时出错

Php 下载docx文件时出错,php,docx,Php,Docx,我正在生成docx并从服务器下载 private static function downloadFile($fileDir) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($fileDir));

我正在生成docx并从服务器下载

private static function downloadFile($fileDir)
{
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($fileDir));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($fileDir));
    readfile($fileDir);
}
这是保存功能。如果我在服务器的临时目录中打开文件,它就会工作。但下载后,我有一个错误“文件已损坏”。我尝试恢复文件,恢复后一切正常。错误在哪里?

readfile($fileDir)
之前,请尝试运行
ob_clean()
flush()
来清理(擦除)和刷新输出缓冲区

引述自:

flush()可能无法覆盖web服务器的缓冲方案,并且对浏览器中的任何客户端缓冲都没有影响。它也不会影响PHP的用户空间输出缓冲机制。这意味着您必须调用ob_flush()和flush()来刷新ob输出缓冲区(如果您正在使用这些缓冲区)

readfile($fileDir)
之前,请尝试运行
ob_clean()
flush()
以清除(擦除)并刷新输出缓冲区

引述自:

flush()可能无法覆盖web服务器的缓冲方案,并且对浏览器中的任何客户端缓冲都没有影响。它也不会影响PHP的用户空间输出缓冲机制。这意味着您必须调用ob_flush()和flush()来刷新ob输出缓冲区(如果您正在使用这些缓冲区)


也许您正在回显/显示输出流中的其他内容在十六进制编辑器中打开文件,并在文件的开头和结尾查找任何非“zippish”的内容。php的任何其他输出(例如警告)都将成为该文件的一部分,并使其看起来已损坏。也许您正在输出流中回显/显示其他内容在十六进制编辑器中打开该文件,并在文件的开头和结尾查找任何非“zippish”的内容。php的任何其他输出(例如警告)都将成为该文件的一部分,并使其看起来已损坏。@Vadim.K您可以通过在文本编辑器中打开损坏的文件来检查此问题,例如。notepad@Vadim.K您可以通过在文本编辑器(例如记事本)中打开损坏的文件来检查这一点