毎日新しい PHP 関数を学習します (2) fgetcsv()/fgets()
ファイルの読み取りと書き込みは一般的なアクションであり、複雑です。いくつかありますが、簡単なものもあります。最も一般的に使用され便利なものは file_get_contents() と file_put_conents() です。ファイルを開いたり閉じたりする必要はありません。
しかし、非常に大きなファイルを読み取る場合、file_get_contents() はすべての内容をメモリに読み取るため、メモリ オーバーフローが発生します。ループで 1 行ずつ読み取るのが最善です。 fgetcsv() は csv ファイルの 1 行を読み取るために使用され、fgets() は通常のファイルを読み取るために使用されます。
csv は、各フィールドが「,」で区切られ、各行が「n」で区切られた、特別にフォーマットされた形式のテキスト ファイルです。 fgetcsv を使用して各フィールドを読み取ることも、fgets を使用して各行を読み取り、explode(‘,’,$data) を使用して各行のデータを分離することもできます。
fgetcsv — ファイル ポインタから 1 行を読み取り、CSV フィールドを解析します
array fgetcsv ( resource $handle [, int $ 長さ = 0 [, 文字列 $区切り文字 = ',' [, 文字列 $囲み = '"' [, 文字列 $エスケープ = '' ]] ] ] )
ハンドル
fopen()、popen()、または fsockopen() によって生成された有効なファイル ポインターを受け入れます >
length は CVS ファイル内の最長の行より大きくなければなりません。このパラメータは PHP 5 ではオプションです (PHP 5.0.4 以降では 0 に設定されます)。
delimiter フィールドの区切り文字を設定します (1 文字のみ使用可能)
enclosure 🎜>フィールドを設定します。折り返し文字 (1 文字のみ許可)
escape
エスケープ文字 (1 文字のみ許可) を設定します。 注: CSV フィールドの文字長が設定された長さを超える場合、関数は毎回その長さの文字のみを読み取り、インデックス 0 の配列を返します。区切り文字「,」が出現すると、区切り文字の後の文字列はブロックされます。> 33 r4444
fgets()
<code><?phpfile_put_contents('test.csv','user1111,user222'."\n".'user3333,user4444');if (($handle = fopen("test.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 6, ",")) !== FALSE) { echo $data[0] . "<br />\n"; } fclose($handle);}?> </code>
注:
handle
ファイル ポインタは有効である必要があり、fopen() または fsockopen() によって正常に開かれた (かつ、fclose() によってまだ閉じられていない) ファイルを指している必要があります。
ハンドルで指定されたファイルから行を読み取り、改行文字 (戻り値に含まれる)、EOF または Stop after length (1 バイトが含まれる) に遭遇すると最大 length - 1 バイトの長さの文字列を返します。長さが指定されていない場合、デフォルトは 1K、つまり 1024 バイトになります。
戻り値
<code>string fgets ( resource $handle [, int $length ] )</code>