PHPExcel-无需下载,将其保存到目录

时间:2018-11-23 12:59:06

标签: php phpexcel

我试图将Excel生成的文件存储到服务器目录,而不是在到达路径后下载。

我的代码:

// worksheet
$objPHPExcel->getActiveSheet()->setTitle('Podaci');                       
$objPHPExcel->setActiveSheetIndex(0);

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

header('Cache-Control: max-age=1');

header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header ('Cache-Control: cache, must-revalidate'); 
header ('Pragma: public'); // HTTP/1.0

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
//$objWriter->save('php://output');
$putanja_spremanja_fajla = 'mail/mjesecni_podaci.xlsx';
$objWriter->save($putanja_spremanja_fajla);
sleep(1);
slanje_maila($db, $datum);

我试图删除一些标题行,但是我的文件已损坏或出现一些错误。 有什么建议么?

2 个答案:

答案 0 :(得分:1)

  1. 删除所有 <HeaderTemplate><asp:Label ID="ChatTitle" Text='<%#Session["user"]%>' runat="server"></asp:Label>:</HeaderTemplate>
  2. 使用完整路径:例如header()
  3. Cron作业:删除/home/database/public_html/application/mail/,因为此行代码检查服务器(cgi-fcgi)或用户(cli)是否“调用”了脚本。

在那之后,您可以使用cron作业或类似的作业(如果要尝试运行.php脚本,则必须切断)。 如果您尝试通过网络浏览器访问链接,则必须使用标头,因为if (PHP_SAPI == 'cli') die('This example should only be run from a Web Browser');与浏览器对话。

答案 1 :(得分:0)

以下几行告诉浏览器需要一个文件。 (精确的Excelfile mjesecni_podaci.xlsx)

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="mjesecni_podaci.xlsx"');

如果您告诉PHPExcel将文件保存到磁盘,则不会将文件传送到浏览器。 如果根本没有任何输出或某种回声或其他任何东西,您将收到错误消息,或者浏览器将使用您产生的输出来“下载”文件“ mjesecni_podaci.xlsx”。

例如:

<?php
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="mjesecni_podaci.xlsx"');

echo "Hello World!"
?>

此代码将下载内容为“ Hello World!”的文件“ mjesecni_podaci.xlsx”。 (将文件保存到磁盘,然后使用记事本++之类的编辑器打开它)

在代码中,应仅删除两行,并确保程序可以写入子文件夹“ mail”。之后,您的代码应该可以工作了。 (至少在sleep(1);之前的部分)。