使用PHPExcel作为Wordpress插件的一部分生成时,Edge Browser文件下载不起作用

时间:2017-08-30 11:42:03

标签: php wordpress phpexcel

我有以下情况:

Wordpress插件(短代码)显示带有“提交”按钮的表单。按下提交按钮后,将生成Excel 2007文件(.xlsx)并将其发送到浏览器以通过HTTP标头下载。 这在Chrome和Firefox中完美运行,但是当我使用Microsoft Edge浏览器(v.40.15063.0.0)或Internet Explorer(v.11.540)尝试此操作时,不会触发下载,而是直接重定向到

http://example.com/wp-admin/admin-ajax.php

并停止。

我怀疑它与插件(php)发送的标题有关。当我从

更改内容类型标题时
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Content-Type: application/vnd.ms-excel

它启动文件下载,但文件为空(并且文件名错误),因为我生成的文件是Excel 2007,但后者的内容类型是旧的Excel文件版本(我不想生成)。我也尝试了添加的两种内容类型; charset = utf-8具有相同的结果。

摘自我的主要插件文件:

add_action( 'wp_ajax_myplugin_generate_report', 'handle_report_request' );
add_action( 'wp_ajax_nopriv_myplugin_generate_report', 'handle_report_request' );

function handle_report_request() {

    // Check the nonce
    if ( empty($_POST) || !wp_verify_nonce($_POST['abcd'],'myplugin_generate_report') ) {
        exit; 
    }

    try {
        $date = new DateTime("now");
        $output_filename = "Report_Prefix" . $date->format("Ymd");
        $writeExcel($output_filename);
    } catch (Exception $ex) {
        echo "Error generating report: " . $ex->getMessage();
    } finally {
        wp_die();
    }
}

function writeExcel($outputFilename) {
  $excelObj = new PHPExcel();

  [... populating PHPExcel object ...]

  // Redirect output to a client’s web browser (Excel2007)
  header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', true, 200);
  header('Content-Disposition: attachment;filename="' . $outputFilename . '.xlsx"');
  // header("Content-Type: application/vnd.ms-excel; charset=utf-8");
  header('Cache-Control: max-age=0');
  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'); // HTTP/1.1
  header ('Pragma: public'); // HTTP/1.0

  $objWriter = PHPExcel_IOFactory::createWriter($excelObj, 'Excel2007');
  $objWriter->save('php://output');
}

带有表单元素的HTML / PHP代码:

<form action="<?php echo admin_url('admin-ajax.php'); ?>" method="post">
    <?php wp_nonce_field('myplugin_generate_report','abcd'); ?>
    <input name="action" value="myplugin_generate_report" type="hidden">
    <input type="submit" value="Generate report">
</form>

我尝试停用/更改某些标题,但没有效果。 Edge拒绝生成文件。

0 个答案:

没有答案