我在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
我该如何解决这个问题?也许我需要在某些动作中使用我的功能?但是哪一个?有什么想法吗?
答案 0 :(得分:1)
终于找到了解决方案。所以我在我的主题文件夹中创建了一个php文件,并在文件的最顶部添加了require('../../../wp-load.php');
代码,这使得所有的wordpress函数都可用,即使这个文件不是wordpress模板页面。因此,现在所有函数都在此文件中可用,我将我的代码从functions.php文件移动到此文件,并且我已经在此文件上运行了cron作业。希望这会有助于其他人。
答案 1 :(得分:0)
使用$x
将 report.php 输出缓冲区保存到exec()
:
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');
}