2013-09-25 74 views
0

我在使用fputcsv导出CSV文件时遇到了一些麻烦。该文件下载,但它是空白的。我已经尝试导出到xls,它完美的工作,但我想使用csv自定义字段标题,如下面的代码所示。我不知道我是否做错了什么,或者如果我需要做任何php.ini更改。我知道我打开了功能,但文件大约是6.5MB的数据库信息。fputcsv写入空白文件

在此先感谢!

$colnames = array(
'forDepts' => "Member No.", 
'clientId' => "Date joined", 
'createdOn' => "Title", 
'createdBy' => "First name", 
'description' => "Notes" 
); 

function map_colnames($input) 
{ 
global $colnames; 
return isset($colnames[$input]) ? $colnames[$input] : $input; 
} 

function cleanData(&$str) 
{ 
if($str == 't') $str = 'TRUE'; 
if($str == 'f') $str = 'FALSE'; 
if(preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) { 
    $str = "'$str"; 
} 
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; 
$str = mb_convert_encoding($str, 'UTF-16LE', 'UTF-8'); 
} 

// filename for download 
$filename = "website_data_" . date('Ymd') . ".csv"; 

header("Content-Disposition: attachment; filename=\"$filename\""); 
header("Content-Type: text/csv; charset=UTF-16LE"); 



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

$flag = false; 

$result = mysql_query("SELECT forDepts, clientId, createdOn, createdBy, description FROM notes") or die('Query failed!'); 

while(false !== ($row = mysql_fetch_assoc($result))) { 
if(!$flag) { 
    // display field/column names as first row 
    fputcsv($out, array_keys($row), ',', '"'); 
    $flag = true; 
} 
array_walk($row, 'cleanData'); 
fputcsv($out, array_values($row), ',', '"'); 
} 
fclose($out); 
exit; 
+1

你不能使用['SELECT ... INTO OUTFILE'](http://dev.mysql.com/doc/en/select-into.html)的一些原因? – eggyal

回答

0

这可能是您的分隔符的问题。它仅适用于我使用文件名和数组作为参数(即不指定参数3和4)。