【问题标题】:generate weekly report pdf with mpdf - functions.php使用 mpdf -functions.php 生成每周报告 pdf
【发布时间】:2017-06-05 14:01:54
【问题描述】:

我在 wordpress 上使用 mpdf 来生成 PDF 文件。我正在开发一种功能,它将每周向我的用户发送报告,该报告应以电子邮件的形式发送,并且 pdf 将附加在电子邮件中。

我的问题是我在 functions.php 文件中运行代码,因为每周运行此代码,我将使用服务器端 cron 作业,我的函数应该在 functions.php 文件中执行它。所以我在functions.php文件中添加了这段代码:

function weeklyReportFunc(){
    include('mpdf/mpdf.php');
    $mpdf = new mPDF();
    ob_start();
    require get_template_directory() . '/includes/report.php';
    $x = ob_get_contents();
    ob_end_clean();
    $mpdf->WriteHTML($x);
    $today = date('Y-m-d');
    $pdfName = 'weekly-report-'.$today;
    $mpdf->Output($pdfName.'.pdf', 'D');
}

这向我显示了以下错误:

Warning: Cannot modify header information - headers already sent by (output started at 
/home/user/public_html/doms/wp-admin/includes/template.php:1995) in /home/user/public_html/
doms/wp-content/themes/mytheme/mpdf/mpdf.php on line 8314

Warning: Cannot modify header information - headers already sent by (output started at 
/home/user/public_html/doms/wp-admin/includes/template.php:1995) in   
/home/user/public_html/doms/wp-content/themes/mytheme/mpdf/mpdf.php on line 1706
mPDF error: Some data has already been output to browser, can't send PDF file

我该如何解决这个问题?也许我需要在某些操作中使用我的功能?但哪一个?请问有什么想法吗?

【问题讨论】:

  • 检查:/home/user/public_html/doms/wp-admin/includes/template.php:1995 通常问题是 php 文件末尾的空格(删除 php 结束标签以防止这种情况)
  • 但它是 wordpress 核心文件。如果我删除 php 结束标签,那么在下一次更新时我需要重新做。在每个 wordpress 更新中都一样。 @SanderBackus
  • 我检查并在那一行 (/home/user/public_html/doms/wp-admin/includes/template.php:1‌​995) 没有奇怪的空格/结束标签,它不是甚至该文件的最后一行。有 php 关闭/打开标签,但它必须在那里。还有其他建议吗? @SanderBackus
  • 那条线上还有其他输出吗?因为在发送 headers 之前应该有 0 输出。
  • 这是那行内容:<html xmlns="http://www.w3.org/1999/xhtml" class="ie8 <?php echo $admin_html_class; ?>" <?php@SanderBackus

标签: php wordpress pdf mpdf


【解决方案1】:

使用exec()report.php 输出缓冲区保存到$x

function weeklyReportFunc(){
    ob_start();
    include('mpdf/mpdf.php');
    $mpdf = new mPDF();
    exec('php -f '.get_template_directory().'/includes/report.php',$output);
    $x = $output[0];
    $mpdf->WriteHTML($x);
    $today = date('Y-m-d');
    $pdfName = 'weekly-report-'.$today;
    $mpdf->Output($pdfName.'.pdf', 'D');
}

【讨论】:

  • 在调用 MPDF 类之前尝试使用ob_start()
  • 奇怪...你应该在 functions.php 之外尝试,只是为了测试。
  • "我的函数应该在 functions.php 文件中执行它" - 是因为 Wordpress 吗?
  • 是的,但现在我正在尝试将该功能移动到空白页面并为该页面添加 cron 作业@ShutUpMagda
  • 是的。好多了;)
【解决方案2】:

终于找到了解决办法。因此,我在我的主题文件夹中创建了一个 php 文件,并在文件的最顶部添加了 require('../../../wp-load.php'); 代码,这使得其中的所有 wordpress 功能都可用,即使该文件不是 wordpress 模板页面。所以现在这个文件中的所有函数都可用,我将我的代码从functions.php文件移动到这个文件,我已经在这个文件上运行cron作业。希望这对其他人有帮助。

【讨论】:

  • 我也这样做了,它确实有效,但是如果它是分布式插件,例如require $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';,您应该将其设为动态链接而不是 ../../../
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多