2011-12-13 91 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

檢查我的編輯,我添加了我建議的解決方案 –