Yii 形成一个Excel文件(PHPExcel)并将其作为附件(PHPMailer)邮寄,而无需服务器存储,可能吗?

Yii 形成一个Excel文件(PHPExcel)并将其作为附件(PHPMailer)邮寄,而无需服务器存储,可能吗?,yii,phpexcel,phpmailer,send,email-attachments,Yii,Phpexcel,Phpmailer,Send,Email Attachments,我想形成一个文件(PHPExcel)并将其作为附件发送(PHPMailer),而无需服务器存储,可以吗 我知道在PHPExcel中形成/创建文件并通过phpMail将其作为附件发送的可能性。但它通过在服务器的某个位置写入文件来工作。就服务器资源消耗而言,性能较差。 PHPExcel允许以这种方式直接输出,而无需在服务器上保存: $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); ob_end_clean(); header('Co

我想形成一个文件(PHPExcel)并将其作为附件发送(PHPMailer),而无需服务器存储,可以吗

我知道在PHPExcel中形成/创建文件并通过phpMail将其作为附件发送的可能性。但它通过在服务器的某个位置写入文件来工作。就服务器资源消耗而言,性能较差。 PHPExcel允许以这种方式直接输出,而无需在服务器上保存:

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
ob_end_clean(); 
header('Content-Type: application/vnd.ms-excel');
...
$objWriter->save('php://output'); 

是否可以(以及如何)将其动态附加到电子邮件中,类似于save(php://output“)

要在不使用本地文件的情况下发送附件,请使用
addStringAttachment()
方法。例如:

$string = $mything->getExcelData();
$mail->addStringAttachment($string, 'myfile.xls');
这将在内部调用
PHPMailer::filenameToType()
,这将为
.xls
扩展名设置适当的
应用程序/vnd.ms excel
MIME类型


一般来说,这样做可能不需要太担心内存消耗-PHPExcel本身的内存消耗远远大于临时存储此字符串,因此,如果遇到麻烦,您可能会在获得此结果之前就这样做

将excel输出捕获到字符串,使用链接方法附加到电子邮件。但是请注意,如果excel变得“大”,您很容易就会因为内存不足错误而终止脚本。@MarcB,谢谢您的警告,但是如果excel文件的大小为3M,是否会过载和内存不足错误?不知道。这取决于您设置的php内存限制。但是要考虑的是,您将捕获的字符串复制了几次:原始捕获,传递给PHPMALL用于附件,然后在其内置的电子邮件中再次嵌入。只需将您的数据放入字符串中,并将其传递到PHPMALLER实例上的<代码> AdString附件> /代码>。你可以回答一下,我来核对一下。