Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【PHPerKaigi2021】PHPでCSVを安心して扱うために

ICKX
March 27, 2021

 【PHPerKaigi2021】PHPでCSVを安心して扱うために

PHPerKaigi2021で発表した『PHPでCSVを安心して扱うために』の資料です。
サンプル・解説コードは https://github.com/wakabadou/phperkaigi2021 で公開しています。

ICKX

March 27, 2021
Tweet

More Decks by ICKX

Other Decks in Programming

Transcript

  1. • composer require fw3/streamsとしてfw3/streamsを インストールします • 次の例のようにstream filterを登録します ※ 同一リクエスト内で一度だけ登録すればOKです

    • 後は必要なクラスをuseし、無名関数の中でSpecクラスを用いて SplFileObjectなどでCSVを処理すればOKです
  2. • 環境や案件により、ComposerやAutoloaderが使えない場合もあります • その場合は、fw3-for-old/streamsを使用してください • https://github.com/fw3-for-old/streams を開き”Code”ボタンを押下 ”Download ZIP”からアーカイブをダウンロードしてください •

    ダウンロードしたアーカイブを任意のディレクトリに展開してください • アーカイブ内のsrc/filters_require_once.phpを読み込みます require_once sprintf(‘%s/src/filters_require_once.php’, $path_to_copy_dir); として読み込んでください • 以降はuseで指定する名前空間のベンダー名をfw3からfw3_for_oldに変更すれば fw3/streamsを使って解決(事前準備)と同じ手順を適用できます Specで記述した内容を 文字列として展開 ここを置き換えます
  3. fgutcsv fputcsv SplFileObject • • • • 0x5C • “同”“ソ”

    213 ��“�¥”,213 • • CSVと直接関係はないですが「ポ」など 2バイト目が0x7C (|)な文字が含まれた事で コマンドのパイプが成立する話もあります
  4. league/csv • • • SplFileObject Stream::getCurrentRecord() fgetcsv fgutcsv fputcsv SplFileObject

    • Q:pull request出してあげたら? A:league/csv自体の手触りを変えずに 実現する方法が思いつかない
  5. • explode implode • • fgutcsv fputcsv SplFileObject • •

    file_get_contents file_put_contents • • • fread fwite • 可及的速やかに別の手段を検討しましょう