web-dev-qa-db-ja.com

fgets()とfread()-違いは何ですか?

fgets()fgetss()しかし、fgets()およびfread()、誰かがこの主題を明確にしてもらえますか?どちらが速いですか?ありがとう!

32
Alix Axel

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

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


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

  • テキストファイルから行を読み取る場合は、 fgets を使用します。
  • ファイルから一部のデータ(必ずしも行ではない)を読み取りたい場合は、 freadを使用します
49
Pascal MARTIN

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

1
zloctb

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

0
Pritom Das

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

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

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

0
Abhishek Pai