fputcsv関数を使うと、CSVファイルの出力が出来る。
下記、PHPのマニュアルサイトにある使い方。
<?php
$list = array (
array(‘aaa’, ‘bbb’, ‘ccc’, ‘dddd’),
array(‘123’, ‘456’, ‘789’),
array(‘”aaa”‘, ‘”bbb”‘)
);
$fp = fopen(‘file.csv’, ‘w’);
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
ただし、このままだと環境によってはExcelで開くと
文字化けしたり、開けない?という現象がある様子。
理由は、fputcsvの改行コードが、LFになっているから。
Excelで正常に読める改行コードは、Windowsでよく使うCRLF。
これを解決するには、stream_filter_registerと、
stream_filter_appendを使うらしい。
こんな感じ。
<?php
array(‘aaa’, ‘bbb’, ‘ccc’, ‘dddd’),
array(‘123’, ‘456’, ‘789’),
array(‘”aaa”‘, ‘”bbb”‘)
);
$list
= array (array(‘aaa’, ‘bbb’, ‘ccc’, ‘dddd’),
array(‘123’, ‘456’, ‘789’),
array(‘”aaa”‘, ‘”bbb”‘)
);
$fp = fopen(‘file.csv’, ‘w’);
stream_filter_register(“msLineEnding”, “ms_line_ending_filter”);
stream_filter_append($fp, “msLineEnding”);
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
class ms_line_ending_filter extends php_user_filter{
function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
$bucket->data = preg_replace(“/n$/”, “”, $bucket->data);
$bucket->data = preg_replace(“/r$/”, “”, $bucket->data);
$bucket->data = $bucket->data . “rn”;
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
?>
下記、参考にしたサイト。
http://d.hatena.ne.jp/omoon/20110527/1306475827
コメントはまだありません