【问题标题】:PHPExcel - instead of downloading save it to the directoryPHPExcel - 而不是下载保存到目录
【发布时间】:2018-11-23 12:59:06
【问题描述】:

我正在尝试将 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);

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

【问题讨论】:

    标签: php phpexcel


    【解决方案1】:
    1. 删除所有header()
    2. 使用完整路径:例如/home/database/public_html/application/mail/
    3. Cron 作业:删除 if (PHP_SAPI == 'cli') die('This example should only be run from a Web Browser');,因为这行代码检查脚本是否被服务器(cgi-fcgi)或用户(cli)“调用”。

    之后,您可以使用 cron 作业或类似的作业(如果服务器尝试运行 .php 脚本)。 如果您尝试通过网络浏览器访问链接,您必须使用标题,因为headers 与浏览器对话。

    【讨论】:

      【解决方案2】:

      以下几行告诉浏览器期待一个文件。 (准确地说是 Excel 文件 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”。 (将文件保存到磁盘并使用 Notepad++ 或类似的编辑器打开)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-27
        • 2015-10-20
        • 1970-01-01
        • 2012-01-10
        • 2020-03-17
        • 1970-01-01
        • 2018-09-14
        • 2023-04-10
        相关资源
        最近更新 更多