PHPを使ったプログラムでCSVファイルをアップロードしてテーブルに保存する処理を作りました。
テストをして気づいたのですが、どうやらCSVファイルに改行が含まれていると最初の1つがなくなるみたいです。
自分なりに試してみた結果、ファイルは正しく読めていてそのままテキストファイルとして保存すると改行は残っていました。また文字コードは変換してもしなくても結果は変わらず、改行コードはCR+LFでもLFでも同じ結果です。
SplFileObjectがcsvを読み込むと発生するみたいです。
ちなみにfgetcsvで読み込むと改行は消えず期待通りのデータが取得できます。
改行の含まれるcsvファイルはcsvじゃない!というご意見は承知していますが業務上必要なのでそうも言ってられません。
SplFileObjectのREAD_CSVのバグでしょうか?
できればSplFileObjectを使いたいと思っているので回避方法があれば教えていただきたいです。
※今の環境はPHPやサーバーの設定は変更できない状況です・・
PHP
1$filename = $getfile[0]['saved_to'] . $getfile[0]['saved_as']; 2$spec = "php://filter/read=convert.iconv.cp932%2Futf-8/resource=$filename"; 3$file = new \SplFileObject($spec, 'rb'); 4$file->setFlags( 5 \SplFileObject::READ_CSV | 6 \SplFileObject::SKIP_EMPTY | 7 \SplFileObject::READ_AHEAD | 8 \SplFileObject::DROP_NEW_LINE 9); 10foreach ($file as $i => $row) { 11 //1行目を読み飛ばす 12 if ($i === 0) { 13 continue; 14 } 15 var_dump($row); 16}
//CSVデータ name,options,explanation POUCH-A,"COLOR BK BL WH SIZE S M L","テスト テスト" POUCH-B,"","テスト テスト"
PHP
1//結果 2//1件目のデータは COLOR BK BL WHの次の改行がなくなっています 3//2件目のデータはテストの次の改行がなくなっています 4array (size=3) 5 0 => string 'POUCH-A' (length=7) 6 1 => string 'COLOR BK BL WH 7SIZE S M L' (length=26) 8 2 => string 'テスト 9 10テスト' (length=22) 11 12/var/www/html/aaa/controller/upload.php:59: 13array (size=3) 14 0 => string 'POUCH-B' (length=7) 15 1 => string '' (length=0) 16 2 => string 'テスト 17テスト' (length=20)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/29 09:29