北青山通信 – from aoyama » PHPのfgetcsv()は使えない?

PHPのfgetcsv()は使えない?

PHPの関数で用意されているfgetcsv()は、CSVファイルを一行読み込んで、各項目を配列で返してくれます。こんな感じ。

$handle = @fopen("testtest.csv", "r");
$buffer = fgetcsv($handle, 4096);

ただし、CSVファイルに2バイトのデータが含まれていたら、うまく切り分けてくれない。PHPの内部コードはUTF-8で、CSVファイルがシフトJISなら、変なところで切ってくれる。

仕方ないので、手っ取り早く

$handle = @fopen("testtest.csv", "r");
$buffer = split(",", fgets($handle, 4096));

のように変更してあげる。CSVファイルはこちらでプログラムで生成されているので、途中にコンマが紛れてこないだろうということで、とりあえずOKとしておきます。なんだが美しくないなあー。これだと完全なCSVファイルの処理をしていないので、また後で考えなければいけないか・・・。

トラックバックURL

2 コメント

  • 1. anishio 登録時刻 2008年08月02日 土曜日 23:23 :

    fgetcsv()はそもそもPHP5で文字化けの不具合があるので、使えない可能性大ですよね。

    個人的にはCSVやTABテキストファイルを読むのであれば、explode()を好んで使っています。

  • 2. ando 登録時刻 2008年08月03日 日曜日 21:30 :

    コメントありがとうございます。

    explode()というのもありですね。PHPのマニュアルを見るとsplit()との違いが、初めてわかりました。情けない・・・。

    今は単純にコンマ区切りでいいのですが、完璧にCSVファイルを読み込め、なんて案件が来たら面倒なことになりますね。

コメント

XHTML: 次のタグを使用可能です。: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <em> <strong>