PHP解释';s的fflush()函数


Explanation of PHP's fflush() function

手册说它将输出刷新到一个文件中。此外,他们还举了一个例子。

$filename = 'bar.txt';
$file = fopen($filename, 'r+');
rewind($file);
fwrite($file, 'Foo');
fflush($file);
ftruncate($file, ftell($file));
fclose($file);

我试图理解它的必要性。我所做的是:

  • 我创建了一个bar.txt文件
  • 我运行了脚本
  • 我打开bar.txt,看到里面有"Foo",然后我又把文件清空了
  • 然后。。。我从脚本中删除了fflush($file);,然后再次运行它
  • 结果完全一样。我又一次把文件清空了
  • 之后,我将frwite()行更改为fwrite($file, 'Foo'); die();
  • 再次。。。相同的结果。。。里面有"Foo"的文件

现在,我不认为使用fflush()有什么意义。

在这个例子中,我看不出fflush的必要性。你能提供一个fflush()确实必要的例子吗。

链接:http://php.net/manual/en/function.fflush.php

fflush

为了提高效率,当我们调用像fwritefputcsv这样的函数时,PHP的核心系统库不一定会立即写入文件。它将它们存储在缓冲区中,并在一段时间后同时存储。

例如,假设你有一个循环,在这个循环中你调用fputcsv函数,那么PHP的系统库不一定会在每个循环中将它存储到文件中。

那么使用fflush有什么意义呢

但出于日志记录的目的,我们需要确保尽快看到日志,因此最好在每次fwrite之后使用fflush。除了日志记录之外,我们不需要强制刷新。让PHP内部处理效率。

参考

此函数强制将所有缓冲输出写入文件句柄所指向的资源。fflush关于的PHP文档

fflush()提供了与flush()相同的必要性,不同之处在于输出被发送到文件而不是浏览器。

基本上,它所做的是强制数据立即写入,而不是将其全部存储在缓冲区中,直到可以写入为止。这在几种情况下可能很有用,例如使用linux命令tail监视日志:https://en.wikipedia.org/wiki/Tail_(Unix)。