2015-12-02 74 views
2

我有一个数组,其中包含我想以csv格式附件发送的键和值。我试图这样的:创建csv文件时的空结果

... 
$mail->addStringAttachment(create_csv($dataCSV), "test.csv", $encoding = 'base64', $type = "text/csv", $disposition = 'attachment'); 
... 

再下面,我宣布我create_csv功能

function create_csv(array &$array) { 
    if (count($array) == 0) { 
     return null; 
    } 
    ob_start(); 
    $df = fopen("php://output", 'w'); 
    foreach ($array as $key => $value) { 
     fputcsv($df, $key); 
     fputcsv($df, $value); 
    } 
    fclose($df); 
    return ob_get_clean(); 
} 

这虽然结束了附加文件与我的邮件没有内容,即使如果我调试keyvalue在这一点上,他们有预期的价值。

这是为什么,我该如何解决?

+0

检查“create_csv”实际上是否返回您所期望的。我还建议使用'php:// temp'流来代替输出,所以你不需要使用笨拙的输出缓冲,就像[本例中]一样(http://php.net/manual/en/wrappers .php.php#refsect1-wrappers.php-例子)。 – Synchro

+0

@Synchro多数民众赞成它不是。它什么都不返回。我应该尝试使用一个临时文件,而且我会,但我现在很固执,我想看看我做错了什么。 – dearn44

回答

2

您误用fputcsv。该函数的第二个参数是CSV中的一行。

如果你改变你的循环来

foreach ($array as $key => $value) { 
    fputcsv($df, [$key, $value]); 
} 

附件中的CSV将行与2昏迷分隔值列表。例如对于$dataCSV = ['one','two','three']附件将是

0, one 
1, two 
2, three 
+0

经验教训,谢谢。 – dearn44