PHP的fflush()函数的解释

时间:2016-05-09 15:30:07

标签: php filesystems

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

$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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

fflush

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

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

那么使用fflush

是什么意思

但是为了记录日志,我们需要确保尽快看到日志,因此最好在每个fflush之后使用fwrite。除了记录之外,我们不需要强制冲洗。让PHP内部处理效率。

参考

  

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