2017-01-20 3 views
1

J'utilise mpdf sur wordpress pour générer des fichiers PDF. Je travaille sur une fonctionnalité qui enverra un rapport hebdomadaire à mes utilisateurs et ce rapport devrait être envoyé comme email et pdf sera joint dans l'email. Mon problème est que je cours le code dans le fichier functions.php parce que pour exécuter ce code chaque semaine, je vais employer le travail cron de côté de serveur et ma fonction devrait être dans le fichier functions.php pour l'exécuter. Donc, j'ai ajouté ce code dans le fichier functions.php:générer un rapport hebdomadaire pdf avec mpdf - 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'); 
} 

Et cela me montre ci-dessous erreur:

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 

Comment puis-je résoudre ce problème? Peut-être que je dois utiliser ma fonction dans une action? mais lequel? Des idées s'il vous plaît?

+0

check: /home/user/public_html/doms/wp-admin/includes/template.php:1995 Souvent, le problème est un espace à la fin d'un fichier php (supprimer les balises de fermeture php pour éviter cela) –

+0

mais il est fichier core wordpress. Si je supprime la balise de fermeture php, je devrai la refaire à la prochaine mise à jour. Et même sur chaque mise à jour wordpress. @SanderBackus – aidadev

+0

J'ai vérifié et sur cette ligne (/home/user/public_html/doms/wp-admin/includes/template.php:1 995) il n'y a pas de balise espace/fermeture impaire et ce n'est même pas la dernière ligne de ce fichier. Il y a une balise php fermeture/ouverture mais il faut être là. D'autres suggestions? @SanderBackus – aidadev

Répondre

1

solution Enfin trouvé. J'ai donc créé un fichier php dans mon dossier de thème et tout en haut du fichier ajouté require('../../../wp-load.php'); code qui rend toutes les fonctions wordpress disponibles à l'intérieur, même si ce fichier n'est pas une page de modèle wordpress. Comme toutes les fonctions sont maintenant disponibles dans ce fichier, j'ai déplacé mon code du fichier functions.php vers ce fichier et j'exécute déjà un travail cron sur ce fichier. J'espère que cela aidera quelqu'un d'autre.

+0

Je viens de le faire aussi et cela a fonctionné, mais vous devriez en faire un lien dynamique plutôt que ../../ ../ si c'est un plugin distribué par exemple 'require $ _SERVER ['DOCUMENT_ROOT']. '/wp-load.php'; ' – PaulMrG

+0

Oui bien sûr, merci d'avoir déclaré que @PaulMrG – aidadev

0

Enregistrer report.php tampon de sortie à l'aide $xexec():

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'); 
} 
+0

Ne aide pas du tout. Mêmes erreurs @ShutUpMagda – aidadev

+0

Essayez d'utiliser 'ob_start()' avant d'appeler la classe MPDF. – ShutUpMagda

+0

J'ai essayé, n'aide pas – aidadev