다음과 같은 엑셀 서식으로 다운로드 파일로 구현한 예입니다.
<?PHP
$data = array(
array(
"firstname" => "Mary",
"lastname" => "Johnson",
"age" => 25),
array(
"firstname" => "Amanda",
"lastname" => "Miller",
"age" => 18),
array(
"firstname" => "James",
"lastname" => "Brown",
"age" => 31),
array(
"firstname" => "Patricia",
"lastname" => "Williams",
"age" => 7),
array(
"firstname" => "Michael",
"lastname" => "Davis",
"age" => 43),
array(
"firstname" => "Sarah",
"lastname" => "Miller",
"age" => 24),
array(
"firstname" => "Patrick",
"lastname" => "Miller",
"age" => 27)
);
$colnames = array(
'firstname' => "First name",
'lastname' => "Last name",
'age' => "Age",
);
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) . '"';
}
$filename = "website_data_" . date('Ymd') . ".csv";
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: text/csv");
$out = fopen("php://output", 'w');
$flag = false;
foreach($data as $row) {
if(!$flag) {
$firstline = array_map("map_colnames", array_keys($row));
fputcsv($out, $firstline, ',', '"');
$flag = true;
}
array_walk($row, 'cleanData');
fputcsv($out, array_values($row), ',', '"');
}
fclose($out);
exit;
?>