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でした。

ばっちぐー。