2011-12-13 35 views
0

我想重写下面的代码以生成字符串。这个字符串我想附加到一个eamil。它应该显示为一个csv文件。php string attachchement - 将csv从字符串附加到电子邮件

$fh = fopen($file,'w'); 

    function __outputCSV(&$vals, $key, $filehandler) { 
     fputcsv($filehandler, $vals, ';', '"'); 

    } 
    array_walk($aData, '__outputCSV', $fh); 
    fclose($fh); 

任何想法的?

+0

的可能重复的[附加文件使用PHP到电子邮件(http://stackoverflow.com/questions/1578389/attach-file-to-email-using-php) –

回答

0

明显和偷懒的做法会不会改写它,而是简单地创建一个临时文件,然后在其上调用file_get_contents()

然而,这会闷,所以我会建议什么可说是过度复杂的方法,但它应该很好地工作,将完全在内存中完成的:

使用this class是内置PHP手册作为如何编写自定义协议处理程序,和下面的示例中代码的示例:

function __outputCSV(&$vals, $key, $filehandler) { 
    fputcsv($filehandler, $vals, ';', '"'); 
} 

stream_wrapper_register("var", "VariableStream"); 

$myCSVdata = ""; 

$fh = fopen('var://myCSVdata', 'w'); 
array_walk($aData, '__outputCSV', $fh); 
fclose($fh); 

echo $myCSVdata; // Ta Da! 
0

最好的办法是获得一个MIME兼容的电子邮件类,可以发送附件的电子邮件。我记得一会儿使用RMail或PHPMimeMail,你不得不谷歌它。

否则,您需要了解如何自己构建MIME邮件。但是,对于所有的麻烦,值得我真的推荐你去上课,这已经为你做了。

编辑:

我不明白你的问题,首先,也许你应该完全地重新格式化并更改您的标题。这里是我的建议:

$data = ''; 
foreach($aData as $aDataLine) { 
    foreach($aDataLine as $aDataKey => $aDataField) { 
     $aDataLine[$aDataKey] = '"'.str_replace('"', '\\"', $aDataField).'"'; 
    } 
    $data .= implode(',', $aDataLine)."\n"; 
} 
//$data contains your CSV 

我不认为我忘了什么,它应该工作的开箱...

+0

我打算用Zend_Mail发送它。这不是问题。问题是要得到正确的字符串。 – sanders

+0

检查我的编辑,我添加了我建议的解决方案 –