34

我理解和之间的区别fgets()fgetss()但我不明白和之间的区别fgets()fread()有人可以澄清这个问题吗?哪个更快?谢谢!

4

5 回答 5

60

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

fread读取原始数据——它将在指定(或默认)字节数后停止,独立于任何可能存在或不存在的换行符。


速度不是使用另一个的理由,因为这两个功能只是不做同样的事情:

  • 如果要从文本文件中读取一行,请使用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($filename, $bytes) fgets 通常读取 $bytes-1 数量的数据并在换行符或 EOF(文件结尾)处停止,以先到者为准。如果未指定字节,则默认值为 1024 字节。

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

于 2019-12-16T03:10:45.173 回答
0

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

于 2016-09-25T15:47:44.777 回答
0

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

来自fread文档:

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

于 2020-09-01T16:54:06.310 回答