答案 0 :(得分:49)
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)的字节;根据先前缓冲的数据,返回数据的大小可能大于块大小。