追記
より良い実装をコメントで頂きましたので、あわせてご確認ください。
PHPでCSV、この手の記事は古いのから新しいのまで山のように見つかるけど、なかなかうまくいかなくて嵌ったので、ある程度形になったソースコードをメモしておく。
// setlocaleをまずは設定
setlocale(LC_ALL, 'ja_JP.UTF-8');
// フレームワークによって違うので省略
$filePath = 'CSVファイルのパスを取得するための変数';
// 読み込んだSJISのデータをUTF-8に変換して保存
file_put_contents($filePath, mb_convert_encoding(file_get_contents($filePath), 'UTF-8', 'SJIS'));
// UTF-8に変換したデータをSplFileObjectでCSVとして読み込み
$file = new SplFileObject($filePath);
$file->setFlags(SplFileObject::READ_CSV);
$lineCount = 1;
foreach ($file as $line) {
// ヘッダー行はスキップする
if ($lineCount > 1) {
// 空データはスキップする
if (empty($line[0])) {
continue;
}
// カラム数が想定と異なる場合はエラーとする
if (count($line) !== 3) {
// なんらかのエラー処理
}
// あとは好きに処理する
$aaa = $line[0];
$bbb = $line[1];
$ccc = $line[2];
}
$lineCount++;
}
読み込むCSVがUTF-8だったらもう少しシンプルになると思います。
また、冒頭でsetlocaleが必要な理由は以下のリンクをご参照ください。
http://pentan.info/php/fgetcsv_char.html