【发布时间】:2013-07-18 08:44:33
【问题描述】:
我们正在使用 Cake 的 E-Mail 类发送带有附件的电子邮件。它适用于所有情况,除了一种情况,我们无法找出问题所在。
流程:
- 创建一个 pdf 文件并将其写入文件系统(文件写入正确且存在)
- 发送电子邮件时,附件大小为 0 字节(而要附加的文件已在文件系统中正确创建)
工作代码:// 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');
@987654335 @$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 .'certificates' . DS . $certLoginId . $certCourseId . '.pdf' -
两次出现输出相同的路径 - 所以它应该可以工作。 [它现在实际上做了什么 - oO] ...抱歉打扰了。
-
"-- 这里没什么可看的 - 报告工作代码不工作 --" ... 是否意味着没有错误或已解决,您应该删除问题?
-
等一下 - 请不要删除问题。我们仍在调查该主题。
标签: cakephp cakephp-2.3