使用mpdf-functions.php生成周报pdf

使用mpdf-functions.php生成周报pdf,php,wordpress,pdf,mpdf,Php,Wordpress,Pdf,Mpdf,我正在wordpress上使用mpdf生成PDF文件。我正在开发一个功能,将每周报告发送给我的用户,该报告应以电子邮件的形式发送,pdf格式将附在电子邮件中 我的问题是我在functions.php文件中运行代码,因为为了每周运行这段代码,我将使用服务器端cron作业,我的函数应该在functions.php文件中执行。因此,我在functions.php文件中添加了以下代码: function weeklyReportFunc(){ include('mpdf/mpdf.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


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

check:/home/user/public_html/doms/wp admin/includes/template.php:1995通常问题是php文件末尾的空白(删除php结束标记以防止出现这种情况),但这是wordpress核心文件。若我删除了php结束标记,那个么在下一次更新时,我将需要重新做它。每次wordpress更新都是一样的@SanderBackusI检查并在该行(/home/user/public_html/doms/wp admin/includes/template.php:1‌​995)没有奇数空格/结束标记,它甚至不是该文件的最后一行。有php关闭/打开标记,但必须在那里。还有其他建议吗@Sanderbackus那行还有其他输出吗?因为在发送标题之前应该有0个输出。这是行内容:
在调用MPDF类之前尝试使用
ob_start()
。奇怪。。。您应该尝试在functions.php之外进行测试。“我的函数应该在functions.php文件中执行”-这是因为Wordpress吗?是的,但现在我正在尝试将该函数移动到空白页面,并为该页面@ShutUpMagdaYep添加cron作业。太好了;)我也这么做了,它也起了作用,但是如果它是一个分布式插件,比如
require$\u SERVER['DOCUMENT\u ROOT'],你应该把它变成一个动态链接,而不是../../../../..//wp load.php'
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');
}