Wordpress中的PHPSpreadsheet使用明文PHP生成损坏的文件

时间:2018-04-11 07:49:13

标签: php excel wordpress corrupt phpspreadsheet

我正在开发一个Wordpress插件,而我正在尝试创建一个创建Excel导出的按钮。我一直在努力为此找到理想的Wordpress方法,到目前为止我已经想出了这个。这是按钮:

<form method="post" action="">
    <input type="submit" name="export_excel"  value="Maak een Excel export" class="button-primary"/>
</form>

这是我挂钩到admin_init的功能。

add_action("admin_init", "export_excel");


function export_excel() {

if (isset($_POST['export_excel'])) {


    try {
        $filename = 'test.xlsx';

        ob_clean();
        header( 'Pragma: public' );
        header( 'Expires: 0' );
        header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
        header( 'Cache-Control: private', false );
        header( 'Content-Type: application/vnd.ms-excel' );
        header( 'Content-Disposition: attachment;filename=' . $filename );

        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();
        $sheet->setCellValue('A1', 'Hello World !');
        $writer = new Xlsx($spreadsheet);
        $writer->save('php://output');
        ob_flush();

    } catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
    }
}

}

当我点击按钮时,它正确地下载了一个Excel文件,但之后它会发布整个wp_admin php明文,使文件损坏。我假设Wordpress在某个地方这样做,但我还没有找到方法。我很感激任何帮助!

除此之外,我想知道为什么我的页面正在工作,而我添加到admin_init的功能缺少退出语句(为什么不是所有其他代码都被推了?)。当它包含退出语句​​时,我在加载任何管理页面时都有一个白屏。

谢谢!

2 个答案:

答案 0 :(得分:2)

我通过将exit语句放在if语句中来修复它。我之前删除了它,因为它打破了页面,没有意识到在if语句之外Wordpress退出了。

答案 1 :(得分:0)

$writer->save('php://output'); - 应该有文件名,例如: $writer->save('hello world.xlsx');