使用 mpdf 生成每周报告 pdf - functions.php
generate weekly report pdf with mpdf - functions.php
我在 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
我该如何解决这个问题?也许我需要在某些操作中使用我的功能?但是哪一个?有什么想法吗?
使用 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');
}
终于找到解决办法了。所以我在我的主题文件夹中创建了一个 php 文件,并在文件的最顶部添加了 require('../../../wp-load.php');
代码,使所有 wordpress 功能在其中可用,即使这个文件不是 wordpress 模板页面。所以现在所有功能都可以在这个文件中使用,我将我的代码从 functions.php 文件移动到这个文件并且我已经在这个文件上 运行 cron 作业。希望这会对其他人有所帮助。
我在 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
我该如何解决这个问题?也许我需要在某些操作中使用我的功能?但是哪一个?有什么想法吗?
使用 exec()
:
$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');
}
终于找到解决办法了。所以我在我的主题文件夹中创建了一个 php 文件,并在文件的最顶部添加了 require('../../../wp-load.php');
代码,使所有 wordpress 功能在其中可用,即使这个文件不是 wordpress 模板页面。所以现在所有功能都可以在这个文件中使用,我将我的代码从 functions.php 文件移动到这个文件并且我已经在这个文件上 运行 cron 作业。希望这会对其他人有所帮助。