- ベストアンサー
PHPのfgetcsvの処理容量について
- PHPのfgetcsvの処理容量について考える
- fgetcsvを使用してCSVファイルを読み込むスクリプトを作成しています。
- fgetcsvの第二引数で指定するバイト数の最大値についての問題
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>> fgetcsvの第二引数の一回に読み込むバイト数は >> 最大何バイトまで可能というか問題ないでしょうか。 第2引数は、integerの最大値まで設定自体は可能ですので 処理系によって異なります。32bitOSを使っているのなら 約2G(ギガ)バイト程度でしょう。正確には、 echo PHP_INT_MAX; を実行して御自身の処理系で調べてみてください。 但し、第2引数にどんな大きな値を設定しても1行ずつしか読み込みません。 1行に2Gバイトも有るcsvファイルは考えにくいのであまり意味は無いでしょう。 よって、メモリ使用量も第2パラメータでは無く 読み込むファイルの1行のサイズの 方に影響を大きく受けます。 メモリ使用量がご利用のホストでどこまで許されているかは、管理者の設定に依存するので echo ini_get('memory_limit'); で確認してみては如何でしょう。その値までは管理者は利用を許可していることになります また、メモリ使用量はfgetcsvだけでなくその前後のスクリプトにも依存しますので fgetcsv部分にどこまで許容されるかは他の人には判定できません。 御自身の作成したスクリプトの最後に echo memory_get_peak_usage(); を埋めばメモリをどの程度消費しているか確認できます 試しに 第二パラメータをいろいろ変えて (ちなみに、最大は0で無制限になります) 使用メモリの変化を確認し、memory_limit に対してどの程度余裕があるか確認しては 如何でしょうか。
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
fgetcsv関数は、CSVのデータの一行を読み込むための関数ですので、 CSVデータとしての改行が含まれるところまでを一旦読み込みます。 <?php while($row = fgetcsv($fp)){ //一行ずつ読み込むので繰り返し処理をする } ?> 195KBで指定した場合は、一行に、半角で20万文字が含まれていても読めますよ、という指定なんですが、 さすがに一行にはそんなに文字数はないですよね? また、マニュアルに、 http://www.php.net/manual/ja/function.fgetcsv.php PHP5以降では第二引数を省略すると、どんなに長くても一行分は取得してくるとあるので、若干遅くなる可能性がありますが 指定しなくても良いのかな、と思います。
補足
連絡有り難うございます。処理構造の関係でカンマ、カンマと区切っていって一行で結構な長さになるのですが、流石に20万文字はないです。 なのでとりあえず第二引数を省略して様子を見ます。 参考になりました。
お礼
初めまして PHPはこのような事態にも便利な関数があるのですね。 memory_get_peak_usage();で値を変えながら様子を見ます。 多分この回答は他の方にも参考になると思います。 ありがとうございました。