EC-CUBE3およびEC-CUBE3のCSV出力機能で改行コードを変更
経緯
EC-CUBE3とEC-CUBE4でそれぞれCSV出力機能を使用しているのですが、CSVを使ってIFしている連携先から
「改行コードをLFでなくCRLFにしてほしい」
という要望があがりました。
調べてみたけど、スルッと使えるものがなかったので、自分で実装したら、追記2か所でいけました。
変更対象ソース
/src/Eccube/Service/CsvExportService.php
EC-CUBE3もEC-CUBE4も同一ソースでした。
もちろん中身は異なりますが、今回の追記内容は同じでOKです。
追記箇所1
ファイルの一番下に以下を追記します。
class CrlfFilter
{
public 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 . "\r\n";
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
追記箇所2
public function fputcsv($row)
の
fputcsv($this->fp, …の前に以下を追記しました。
// 末尾改行コードをCR+LFにするフィルタクラスをストリームフィルタとして登録
stream_filter_register('CrlfFilter', CrlfFilter::class);
// 登録したフィルタを設定する
stream_filter_append($this->fp, "CrlfFilter");
ローカルで試してもエックスサーバーで試してもOKでした。
ばっちぐー。