我們正在使用Cake的電子郵件類發送帶附件的電子郵件。對於除一個情況以外的所有情況都可以正常工作,而且我們無法確定問題出在哪裏。
過程:
- 的PDF文件被創建&寫入到文件系統(文件被正確地寫入和存在)
- 當電子郵件被髮送的附接是在大小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();
編輯 - 有沒有錯字它是所有正確設置。問題似乎是,由tcpdf生成的PDF在背景中非常不穩定地運行。因此,當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] ...對於令人不安的事感到抱歉。 –
好的。謝謝...... :) –