Мы используем класс электронной почты Cake для отправки электронных писем с вложениями. Он отлично работает для всех случаев, кроме одного, и мы не можем понять, где проблема.
процесса:
- ФРП-файл создается & записывается в файловой системе (файл записывается правильно и существует)
- при отправке почты вложение является 0Bytes в размере (в то время как файл прикрепить правильно создаются в файловой системе)
Рабочим код:
// Write invoice as file
$CakePdf->write(APP . 'tmp' . DS . 'invoices' . DS . $invoiceNo . '.pdf');
[...]
// Send invoice to customer
$Email = new CakeEmail('invoice');
$Email->attachments(APP . 'tmp' . DS . 'invoices' . DS . $invoiceNo . '.pdf');
$Email->to($this->Invoice->Customer->getEmailAdress($customerId));
$Email->viewVars(array('invoice_no' => $invoiceNo));
$Email->send();
Не работает код (вложение нулевых байт):
$CakePdf->write(APP . 'tmp'. DS .'certificates' . DS . $certLoginId . $certCourseId . '.pdf');
[...]
// Send certificate to customer
$Email = new CakeEmail('certificate');
$Email->attachments(APP . 'tmp'. DS .'certificates' . DS . $certLoginId . $certCourseId . '.pdf');
$Email->to($emailOfUser);
$Email->viewVars(array('courseName' => $certCourseName, 'probandName' => $probandName));
$Email->send();
Edit - нет опечатка это все правильно. Кажется, что проблема заключается в том, что генерация PDF-файла tcpdf выполняется в фоновом режиме. Поэтому, когда Cake пытается подключить файл, он не записывается в файловую систему полностью. Поэтому он не может быть прикреплен.
Если попытался дать сон сценарий на некоторое время без успеха:
echo '<br>';
echo $path_to_certificate;
echo '<br>';
echo filesize($path_to_certificate);
sleep(10);
echo '<br>';
echo $path_to_certificate;
echo '<br>';
echo filesize($path_to_certificate);
echo '<br>';
sleep(10);
echo $path_to_certificate;
echo '<br>';
echo filesize($path_to_certificate);
Выходы:
C:\xampp\htdocs\www\eflux_frontend\app\tmp\certificates\13750.pdf
0
C:\xampp\htdocs\www\eflux_frontend\app\tmp\certificates\13750.pdf
0
C:\xampp\htdocs\www\eflux_frontend\app\tmp\certificates\13750.pdf
0
В то время как файл генерируется в то же время, потому что я могу видеть & доступ файл в файловой системе. Это не проблема блокировки, потому что другой код работает в другом месте, но созданный файл меньше, поэтому для обработки не требуется столько времени.
Как я могу гарантировать, что процесс генерации завершен?
Что печатает? 'APP. 'TMP'. DS. 'Сертификаты'. DS. $ certLoginId. $ certCourseId. '.pdf'' –
Оба входа выдают один и тот же путь - поэтому он должен работать. [Что это на самом деле делает сейчас - OO] ... извините за беспокойство. –
Хорошо. Спасибо ... :) –