fgets()和fread() - 有什么区别?

时间:2010-05-01 21:36:55

标签: php smtp stream fread fgets

我理解 fgets() fgetss() 之间的差异,但我没有区别于 fgets() fread() ,有人可以澄清这个问题吗?哪一个更快?谢谢!

5 个答案:

答案 0 :(得分:49)

fgets读取一行 - 即它将停在换行符处。

fread读取原始数据 - 它将在指定的(或默认)字节数后停止,与任何可能或不可能的换行符无关在场。


速度不是使用一个而不是另一个的原因,因为这两个函数不会做同样的事情:

  • 如果您想从文本文件中读取一行,请使用fgets
  • 如果您想从文件中读取某些数据(不一定是一行),请使用fread

答案 1 :(得分: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是已读取的长度字节。

答案 2 :(得分:0)

函数fgets从文本文件中读取单行。它读取的时间很长,直到达到当前行(或文件末尾)的末尾。因此,如果您想从文本文件中读取一行,则应使用fgets。 函数fread不仅读取直到行的结尾,而且读取到文件的末尾[例如fread($ handle)]或指定为参数的字节数[例如fread($ handle,1024)]。因此,如果您想要读取一个完整的文件,无论它是一个包含所有包含行的文本文件还是文件中的任意原始数据,您都应该使用fread。

答案 3 :(得分:0)

这两个功能均用于从文件读取数据

fgets($ filename,$ bytes) fgets通常读取$ bytes-1的数据量,并在换行符或EOF(文件结尾)处停止,以先到者为准。如果未指定字节,则默认值为1024字节。

fread($ filename,$ bytes) fread会精确地读取$ bytes的数据量,并且仅在EOF处停止。

答案 4 :(得分:0)

可接受的答案是正确的,但是fread还有另一种情况下停止阅读。 fread的块限制为8192字节。我从fread($stream, 8300)fget($stream, 8300)获得不同的结果时发现了这一点。

来自fread文档:

如果该流被读取缓冲并且不表示一个普通文件,则最多读取一次等于该块大小(通常为8192)的字节;根据先前缓冲的数据,返回数据的大小可能大于块大小。