34

との違いはわかりますが、fgets()との違いがわかりfgetss()ません。誰かがこのテーマを明確にしてくれませんか?どちらが速いですか?ありがとう!fgets()fread()

4

5 に答える 5

60

fgets行を読み取ります。つまり、改行で停止します。

fread生データを読み取ります-存在する場合も存在しない場合もある改行に関係なく、指定された(またはデフォルトの)バイト数の後に停止します。


これらの2つの関数は同じことを行わないため、速度はどちらか一方を使用する理由ではありません。

  • テキストファイルから1行を読み取りたい場合は、次を使用します。fgets
  • ファイルから一部のデータ(必ずしも行である必要はありません)を読み取る場合は、を使用しますfread
于 2010-05-01T21:38:36.580 に答える
1

バイナリデータおよび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は、バイトが読み取られた長さです。

于 2015-10-28T04:21:34.400 に答える
0

関数fgetsは、テキストファイルから1行を読み取ります。現在の行の終わり(またはファイルの終わり)に到達するまで、非常に長い間読み取っています。したがって、テキストファイルから1行を読み取りたい場合は、fgetsを使用する必要があります。関数freadは、行の終わりまでだけでなく、ファイルの終わりまで読み取ります[eg fread($ handle)]またはパラメーターとして指定されたバイト数[eg fread($ handle、1024)]。したがって、完全なファイルを読み取りたい場合は、すべての行を含むテキストファイルであるか、ファイルからの任意の生データであるかに関係なく、freadを使用する必要があります。

于 2016-09-25T15:47:44.777 に答える
0

両方の関数は、ファイルからデータを読み取るために使用されます

fgets($ filename、$ bytes)fgetsは通常、$ bytes-1の量のデータを読み取り、改行またはEOF(ファイルの終わり)のいずれか早い方で停止します。バイトが指定されていない場合、デフォルト値は1024バイトです。

fread($ filename、$ bytes)freadは、正確に$ bytesの量のデータを読み取り、EOFでのみ停止します。

于 2019-12-16T03:10:45.173 に答える
0

受け入れられた答えは正しいですが、fread読むのをやめるためのもう1つのケースがあります。freadチャンク制限は8192バイトです。fread($stream, 8300)ととは異なる結果が得られたときにこれを発見しましたfget($stream, 8300)

freadドキュメントから:

ストリームが読み取りバッファリングされ、プレーンファイルを表していない場合、チャンクサイズ(通常は8192)に等しい最大バイト数の読み取りが最大で1回行われます。以前にバッファリングされたデータによっては、返されるデータのサイズがチャンクサイズよりも大きくなる場合があります。

于 2020-09-01T16:54:06.310 に答える