タグ

fgetcsvに関するdustpickerのブックマーク (3)

  • fgetcsv関数を文字化け対応 setlocaleの文字コード指定 - [PHP + PHP] ぺんたん info

    PHP5でCSVファイルに日語などマルチバイト文字が含まれるものをfgetcsv()関数で配列に入れるとき、日語文字が消えるまたは一部消えることがあります。 PHP5になってから発生する事象ですが、これはPHP5のバグではありません。設定場所が変わっただけです。 たとえばCSVで次のようなデータがあったとします。 ID,名前,都道府県ID,電話番号or携帯番号 これをfgetcsv()関数で読み込むと Array( [0] => ID, [1] => , [2] => ID, [3] => or携帯番号, ) となります。 全て日語文字の場合は消えて、一部日語文字の場合は先頭の日語文字が消えます。 この現象はPHP4ではおこらず、PHP5で発生します。またwindowsサーバではPHP5でも発生しないことがあります。 fgetcsv()関数の文字コードの指定は、mb_langua

  • PHPでメモリ上に一時ファイルを作る - hnwの日記

    blog.plastik.jp » PHP5 の fgetcsv() で読み込み内容が腐る現象」という記事を読みました。fgetcsv()だとSJISのCSVファイルがうまく読めないので、UTF-8に直してテンポラリファイルに保存してfgetcsvで読み込む、という筋書きのようです。 ちゃんとtmpfile()を使っていたりしてナイスなコードだと思います。でも、すぐ不要になるデータをディスクに書き込むのはイマイチじゃないでしょうか。ここはメモリに書いた方がカッコいいと思うんです。僕なら下記のようにします。 <?php $data = file_get_contents("example.csv"); $data = mb_convert_encoding($data, "UTF-8", "Shift_JIS"); $fp = fopen('php://memory', 'r+'); fw

    PHPでメモリ上に一時ファイルを作る - hnwの日記
  • 巨大なSJISのCSVファイルをfgetcsv関数で処理する - hnwの日記

    さて、前回記事「PHPでメモリ上に一時ファイルを作る」では、file_get_contents関数でCSVファイル全体を取得して文字エンコーディングの変換を行い、変換結果に対してfgetcsv関数を利用しました。しかし、CSVファイルが巨大な場合にはfile_get_contentsを使うとメモリ上限に引っかかってPHPが停止してしまいます。 もちろん、UTF-8CSVファイルに対してfgetcsvを利用するのであれば、どんな大きなCSVファイルだろうと処理することが可能です。なぜなら、fgetcsvはファイルを1行単位で読み込む関数ですから、1行分のメモリ消費だけでファイル全体を読み込み続けられるからです(正確にはストリーム上のデータはバッファリングされるので、バッファサイズ分のメモリは消費しますが)。 それでは、巨大なSJISのCSVファイルをfgetcsvで処理したい場合はどうすれ

    巨大なSJISのCSVファイルをfgetcsv関数で処理する - hnwの日記
  • 1