fgetcsvで、日本語が入らない

エクセルデータで作ったcsvファイル(shift-jis)
を、phpでアップロードして、UTF-8に変換して
DBに突っ込むというところで、
日本語が消える現象が起こった。

$buf = mb_convert_encoding(file_get_contents($upload_data[0]['dir'].$upload_data[0]['file_name']), "UTF-8", "SJIS");
$handle = tmpfile();
fwrite($handle, $buf);
rewind($handle);

while($row = fgetcsv($handle)){

  }

このとき、fgets()でデータを取った場合だと、ちゃんと入るのに、fgetcsv()の場合
日本語が入らない(正確には、一部入ってるものもある)
windowsのローカル環境では問題ないのに、サーバ(Linux)では駄目。

これは、fgetcsv()関数が
「注意: この関数はロケール設定を考慮します。…」
であるためで、

setlocale(LC_ALL,'ja_JP.UTF-8');

をソースの初めに書いておくことで、対応できた。

実行環境によって、異なるので、ソースに書いておいたほうが
いいんでしょうね。

もっと、うまい方法もありそうだが。