Download 强制保存和下载PHPExcel文件

Download 强制保存和下载PHPExcel文件,download,export,phpexcel,Download,Export,Phpexcel,在我的一个项目中,我让用户使用PHPExcel将信息“导出”到Excel文件中。当它工作时,它工作得很完美。其他时候,只有一些人可以打开文件 因为我需要存储创建的导出,所以它们保存在服务器上,然后使用readfile()下载创建的文件。当它不起作用时(现在大多数情况下),人们会遇到“错误的文件格式”错误。真正奇怪的是,既然文件已保存,他们就可以再次尝试下载相同的文件。然后它就起作用了 以下是我的最终保存和下载代码: header('Content-Type: application/vnd.op

在我的一个项目中,我让用户使用PHPExcel将信息“导出”到Excel文件中。当它工作时,它工作得很完美。其他时候,只有一些人可以打开文件

因为我需要存储创建的导出,所以它们保存在服务器上,然后使用readfile()下载创建的文件。当它不起作用时(现在大多数情况下),人们会遇到“错误的文件格式”错误。真正奇怪的是,既然文件已保存,他们就可以再次尝试下载相同的文件。然后它就起作用了

以下是我的最终保存和下载代码:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$Temp_Export_File_Name.'"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//$objWriter->save('php://output');
$objWriter->save('../project_files_images/created_exports/'.$Temp_Export_File_Name);
readfile('../project_files_images/created_exports/'.$Temp_Export_File_Name);
exit;
这段代码有什么我遗漏的地方吗?对于最新版本的Office(Mac或Windows)用户来说,这一问题往往最为突出


谢谢你的意见。

马克的建议是正确的。对于其他可能遇到这种情况的人来说,下面是发生的情况

由于某种原因,PHPExcel需要一个“创建者”和“最后修改人”字段,我不使用它们。我只是注释掉了PHPExcel代码中引用这两项的两行代码

它仍然不能解释为什么它影响了强制文件而不是保存的文件,但我运行的理论是这样的

  • 保存的文件由所有标题信息集创建并保存
  • 强制文件不知何故在文件头上包含了打印错误

  • 在文本编辑器中打开其中一个问题文件,在文件的开头和结尾查找任何空白字符,或者查找任何明显的PHP错误消息PHP发送到“屏幕”的所有内容都会发送到标准php://output 流动这包括错误消息和警告。当您将PHPExcel文件保存到同一输出流时,它将包括来自PHPExcel的二进制流以及那些错误消息和警告。您正在使用标题告诉浏览器输出是一个文件,所以您在屏幕上看不到这一点。输出中包含这些消息意味着它不再是有效的Excel文件。保存到文件时,错误/警告消息仍会转到php://output 并显示在屏幕上,而不是文件上。感谢您的解释和帮助,这一切都是有意义的。你为什么不把它解释成一个答案,这样我就可以给你评分了