PHP - fwrite()会立即保存文件吗?

Nir*_*mal 9 php file-io

这是我的代码:

$zplHandle = fopen($target_file,'w');
fwrite($zplHandle, $zplBlock01);
fwrite($zplHandle, $zplBlock02);
fwrite($zplHandle, $zplBlock03);
fclose($zplHandle);
Run Code Online (Sandbox Code Playgroud)

文件何时保存?是在写入之后还是在关闭之后立即?

我问这个是因为我有Printfil监听文件夹中的文件并打印任何新创建的文件.如果PHP在之后立即提交保存fwrite,我可能会遇到Printfil没有捕获后续写入的问题.

感谢您的帮助.

Sjo*_*erd 11

PHP可能会也可能不会立即写入内容.中间有一个缓存层.您可以使用fflush()强制它写入,但除非您只使用一个fwrite(),否则不能强制它等待.

  • @Julian,不,不是`fwrite`.如果想要更好地控制写入,可以使用[direct I/O](http://php.net/manual/en/book.dio.php)模块. (2认同)

You*_*ung 5

我编写了一小段代码来对其进行测试,似乎在fwrite新内容被检测到之后,而不是之后被检测到了fclose

这是我在Linux上的测试。

#!/usr/bin/env php
<?php
$f = fopen("file.txt","a+");
for($i=0;$i<10;$i++)
{
    sleep(1);
    fwrite($f,"something\n");
    echo $i," write ...\n";
}
fclose($f);
echo "stop write";
?>
Run Code Online (Sandbox Code Playgroud)

运行PHP脚本后,我将tail -f file.txt用于检测新内容。它与php的输出标记同时显示新内容。