タグ:fgetcsv

fgetcsvのバグ

いまさらですが、PHP4ではまともに使用できていた「fgetcsv」関数。
PHP5になった途端不具合の嵐です。(サーバによるかもしれませんが。)

$csv = "/www/csv/test.csv";
$fl = fopen($csv, "r");
while($data = fgetcsv($fl, 10000)){
   echo $data[0].":".$data[1];
}

としていると、カンマでの区切りがうまくいっていないのか、表示されなかったり、特定の文字で文字化けを起こしたりします。
こうなると、mb_convert_encodingで文字コードを調整しようとしてもうまくいきません。

ここはおとなしくfgetcsvをあきらめてfgetsとexplodeを使用しましょう。

$csv = "/www/csv/test.csv";
$fl = fopen($csv, "r");
while($data_fl = fgets($fl)){
   $data_fl = rtrim($data_fl);
   $data = explode(",", $data_fl);
   echo $data[0].":".$data[1];
}

※rtrimは行の最後にある改行コードを取り除いてくれます。必要に応じて記述してください。自分はよく取り出したデータを条件分岐にかけることがあるので、改行コードの\r\nがあると不具合を起こすことがあります。

記述が少し長くなりますが、これで解決します。

nandani | 2010年07月18日 | コメント(0) | トラックバック(0) | PHP関連

Copyright(c) 2010 - 2024 ダリの雑記