【问题标题】:Cannot modify header information - headers already sent by /wp-includes/formatting.php:5716无法修改标头信息 - /wp-includes/formatting.php:5716 已发送标头
【发布时间】:2020-09-04 08:10:51
【问题描述】:

我创建了一个自定义导出到 Excel 函数来导出在自定义页面中为自定义帖子类型生成的报告。

在函数中我使用了下面的headers

    if(isset($_GET['excelexport'])) {
        header("Pragma: public");
        header("Expires: 0");
        header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Disposition: attachment; filename=\"report.xlsx\";" );
        header("Cache-Control: private", false);
        header("Content-Transfer-Encoding: binary");        
        exportToExcel();

    }

但我不断收到错误消息:

警告:无法修改标头信息 - 标头已由(输出开始于 /home/user/public_html/wp-includes/formatting.php:5716) 在 /home/user/public_html/wp-content/themes/twentyseventeen/inc/userHistory.php 在第 36 行

我搜索了一个解决方案,但没有帮助。

【问题讨论】:

  • 您的代码是否放在页面模板中?
  • 是的,调用在名为func.php 的文件中定义的函数,exportToExcel() 被定义为生成包含从数据库查询的某些数据的表

标签: excel wordpress header export-to-excel


【解决方案1】:

该错误意味着当您的代码达到该点时,您已经有其他 header(...) 由 Wordpress 本身在其他地方调用。如果您想在此之前摆脱输出而只使用您的输出,则可以执行以下操作:

if(isset($_GET['excelexport'])) {
   

 ob_end_clean(); // Discard all the output generated until this point
        header("Pragma: public");
        header("Expires: 0");
        header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Disposition: attachment; filename=\"report.xlsx\";" );
        header("Cache-Control: private", false);
        header("Content-Transfer-Encoding: binary");        
        exportToExcel();

    }

这应该可以解决错误

【讨论】:

  • 感谢您的信息,但这并没有解决问题,我仍然遇到同样的错误
  • 如果这不起作用,那么您可以尝试在 WP 执行堆栈中更早地执行您的代码并尝试是否有效
  • 在发布问题之前我已经尝试过了。请注意,我没有使用任何 PHP Excel 库,除了要发送导出 Excel 文件的标头,因为我在 Internet 上找到了一些示例。这有关系吗?
【解决方案2】:

确保您的代码将在 wordpress 生成任何输出之前执行。

在你的functions.php中试试这个:

add_action('init', 'my_excel_output');

function my_excel_export() {
    
    if( isset( $_GET['excelexport'] ) ) {
        header("Pragma: public");
        header("Expires: 0");
        header("Content-Type:   application/vnd.ms-excel; charset=utf-8");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Disposition: attachment; filename=\"report.xlsx\";" );
        header("Cache-Control: private", false);
        header("Content-Transfer-Encoding: binary");        
        exportToExcel();        
        wp_die();
    }
}

输出 excel 数据后,您应该使用 wp_die() 停止 wordpress 执行

【讨论】:

  • 给出的解决方案对我有部分帮助,但是它按原样导出当前页面,而函数exportToExcel() 定义在一个名为func.php 的文件中,用于生成一个自定义表,其中包含从数据库查询的某些数据
猜你喜欢
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2012-06-19
相关资源
最近更新 更多