2016-02-10 1 views
1

Я работаю над веб-приложением, используя PHP как серверную и jQuery-инфраструктуру как клиентскую.PHP - непредвиденное поведение Dompdf и PHPMailer

Один из сценариев приложения - отправить электронное письмо с прикрепленным файлом PDF. Я делаю это с использованием библиотек PHPMailer и Dompdf.

Я создал функцию с именем sendMail в имени файла send.php принять 4 параметра (адрес электронной почты получателя, тему, данные, номер электронной почты) последний параметр - это потому, что я могу отправить 5 разных писем в зависимости от ситуации и параметра данных данные будут отображаться в элементе электронной почты html.

Проблема в том, что я вызываю функцию из send.php, она работает, как ожидалось, отправленное электронное письмо и файл PDF, созданный и прикрепленный к письму.

, но когда мне требуется send.php в любом другом файле и звоните sendMail функция Я получаю электронное письмо только без PDF-файла, а файл даже не сгенерирован или сохранен на сервере.

send.php

<?php 
require_once 'dompdf/autoload.inc.php'; 
// reference the Dompdf namespace 
use Dompdf\Dompdf; 
require 'PHPMailerAutoload.php'; 
$body = "test message"; 
sendMail('[email protected]','MLS mail',$body,5); 


function sendMail($email,$subject,$body,$index){ 

    $mail = new PHPMailer; 

    $mail->IsSMTP(); // telling the class to use SMTP 
    $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only 
    $mail->SMTPAuth = true; // SMTP authentication 
    $mail->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for GMail 
    $mail->Host  = "smtp.gmail.com"; // SMTP server 
    $mail->Port  = 587; // SMTP Port 
    $mail->Username = "[email protected]"; // SMTP account username 
    $mail->Password = "Password"; // SMTP account password         // TCP port to connect to 

    $mail->From = '[email protected]'; 
    $mail->FromName = 'Wilson'; 


    $mail->addAddress($email);  // Add a recipient 

    $mail->isHTML(true); // Set email format to HTML 

    $mail->Subject = $subject;  
    $mail->Body=$body; 

    // instantiate and use the dompdf class 
    $dompdf = new Dompdf(); 
    $dompdf->loadHtml($body); 
    // Render the HTML as PDF 
    $dompdf->render(); 

    $output = $dompdf->output(); 
    $file_to_save= "../work-orderes/file.pdf";  
    file_put_contents($file_to_save, $output); 

    $mail->addAttachment('../work-orderes/file.pdf'); 


    if(!$mail->send()) { 

    // echo $mail->ErrorInfo; 
    } else { 
     return 1; 
    } 
} 
?> 

save.php

<?php 
require("sendSmtp/send.php"); 
session_start(); 
$body = "Hello World!";   

sendMail('[email protected]','MLS mail',$body,5); 


?> 

Любые предложения о том, почему DOMPDF не работает при вызове его из любого другого файла ??

То, что я пытался

  • извлекая DOMPDF и установите последнюю стабильную версию от here
  • очистки весь код и просто оставить функцию Sendmail и назвав его
  • попытаться написать код из the beginnig
+0

Получите одну вещь, работающую одновременно, не пытайтесь делать все сразу. Вы не проверяете возвращаемые значения (например, на 'file_put_contents'), и вы основали свой код на устаревшем примере PHPMailer, поэтому убедитесь, что используете последнюю версию GitHub. Этот вопрос также почти идентичен тому, который был опубликован вчера - это какое-то задание? – Synchro

+0

@Synchro Спасибо за ваш ответ, код, который я опубликовал, - это реальный код из моего приложения и службы рассылки, отлично работающий, я не видел вопроса, о котором вы говорите, пожалуйста, напишите ссылку на него, и я попробую вашу идею для проверки 'file_put_contents' first –

+0

Нет ошибок или предупреждений? Это может быть проблема с автозагрузчиком или с сохранением файла. Является ли save.php в том же месте, что и send.php? – BrianS

ответ

1

Я решил это наконец!

после отладки я обнаружил, что все идет хорошо до $output = $dompdf->output(); после этого я получаю сообщение об ошибке при сохранении файла с помощью $file_to_save= "../work-orderes/file.pdf";

этой работы должным образом, когда я вызываю функцию sendMail() из send.php но когда я называю его из другого файла я получаю сообщение об ошибке доступа к пути.

Ответ здесь, что я должен использовать абсолютный путь не относительна, как показано ниже

$file_to_save= $_SERVER['DOCUMENT_ROOT']."\work-orderes/file.pdf"; 

теперь файл успешно сохранен и прикреплено к письму, как ожидалось!

+0

У меня есть одно сомнение в формате pdf? – user3663