との違いはわかりますが、fgets()
との違いがわかりfgetss()
ません。誰かがこのテーマを明確にしてくれませんか?どちらが速いですか?ありがとう!fgets()
fread()
5 に答える
バイナリデータおよびfreadのfread()には、読み取ることができる文字数に制限があります
$source_file = fopen( $filename, "r" ) or die("Couldn't open $filename");
while (!feof($source_file)) {
$buffer = fread($source_file, 5);
var_dump($buffer); //return string with length 5 chars!
}
番号5は、バイトが読み取られた長さです。
関数fgetsは、テキストファイルから1行を読み取ります。現在の行の終わり(またはファイルの終わり)に到達するまで、非常に長い間読み取っています。したがって、テキストファイルから1行を読み取りたい場合は、fgetsを使用する必要があります。関数freadは、行の終わりまでだけでなく、ファイルの終わりまで読み取ります[eg fread($ handle)]またはパラメーターとして指定されたバイト数[eg fread($ handle、1024)]。したがって、完全なファイルを読み取りたい場合は、すべての行を含むテキストファイルであるか、ファイルからの任意の生データであるかに関係なく、freadを使用する必要があります。
両方の関数は、ファイルからデータを読み取るために使用されます
fgets($ filename、$ bytes)fgetsは通常、$ bytes-1の量のデータを読み取り、改行またはEOF(ファイルの終わり)のいずれか早い方で停止します。バイトが指定されていない場合、デフォルト値は1024バイトです。
fread($ filename、$ bytes)freadは、正確に$ bytesの量のデータを読み取り、EOFでのみ停止します。
受け入れられた答えは正しいですが、fread
読むのをやめるためのもう1つのケースがあります。fread
チャンク制限は8192バイトです。fread($stream, 8300)
ととは異なる結果が得られたときにこれを発見しましたfget($stream, 8300)
。
fread
ドキュメントから:
ストリームが読み取りバッファリングされ、プレーンファイルを表していない場合、チャンクサイズ(通常は8192)に等しい最大バイト数の読み取りが最大で1回行われます。以前にバッファリングされたデータによっては、返されるデータのサイズがチャンクサイズよりも大きくなる場合があります。