2013-02-11 60 views
3
陣列爲CSV轉換

請我有以下陣列:PHP如何使用fputcsv功能

array(3) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(6) "lkjhgj" 
    [1]=> 
    string(16) "[email protected]" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(5) "hgjk," 
    [1]=> 
    string(18) "[email protected]" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(9) "dddd ffff" 
    [1]=> 
    string(13) "[email protected]" 
    } 
} 

我希望把它變成一個CSV文件,所以我嘗試:

$fichier = 'file.csv'; 
$fp = fopen($fichier, 'w'); 

foreach ($list as $fields) 
{ 
    fputcsv($fp, $fields); 
} 

fclose($fp); 

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment;filename='.$fichier); 

但是當我下載文件時,我發現它是空的!

請掌握任何想法?在此先感謝

PS:權限是777

+1

'$ list'在代碼示例中來自哪裏?那裏有什麼? – 2013-02-11 09:25:18

+1

我沒有看到任何實際將文件作爲響應的一部分返回的代碼!在您關閉文件後,必須重新打開它,然後才能發送它。此外,我沒有看到任何錯誤檢查您的代碼,fopen,fputcsv和其他文件操作可能會失敗。你需要檢查他們沒有返回FALSE – GordonM 2013-02-11 09:25:36

+0

使用'$ fp = fopen('php:// output','w');'而不是'$ fp = fopen($ fichier,'w');'' ..看到我的回答下面 – 2013-02-11 09:28:31

回答

11
$fichier = 'file.csv'; 
header("Content-Type: text/csv;charset=utf-8"); 
header("Content-Disposition: attachment;filename=\"$fichier\""); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

$fp= fopen('php://output', 'w'); 

foreach ($list as $fields) 
{ 
    fputcsv($fp, $fields); 
} 
fclose($fp); 
exit(); 
+0

我試過這個代碼。我得到一個損壞的CSV文件。無法打開文件。請幫忙。 – ARUN 2014-03-11 19:31:01

+0

你有什麼樣的數據?在記事本中打開並檢查數據.. – 2014-03-12 06:16:52

+0

@SuhelMeman非常感謝你!它的工作很好 – DRAJI 2014-06-13 11:04:31

0

如果要保存在session數組和編碼的字符的問題。

session_start(); 
$fp = fopen($_SESSION['CSV']['type'].'.csv', 'w'); 
foreach ($_SESSION['CSV'] as $fields) { 
    $val1 = htmlspecialchars_decode(utf8_decode(html_entity_decode($fields[0], ENT_QUOTES | ENT_XML1, 'UTF-8'))); 
    $val2 = htmlspecialchars_decode(utf8_decode(html_entity_decode($fields[1], ENT_QUOTES | ENT_XML1, 'UTF-8'))); 
    $val3 = htmlspecialchars_decode(utf8_decode(html_entity_decode($fields[2], ENT_QUOTES | ENT_XML1, 'UTF-8'))); 
    fputcsv($fp, array($val1,$val2,$val3,$val4,$val5)); 
} 
fclose($fp);