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

时间:2010-07-01 09:19:12

标签: php file-io

这是我的代码:

$zplHandle = fopen($target_file,'w');
fwrite($zplHandle, $zplBlock01);
fwrite($zplHandle, $zplBlock02);
fwrite($zplHandle, $zplBlock03);
fclose($zplHandle);

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

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

感谢您的帮助。

4 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分: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";
?>

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

答案 2 :(得分:2)

该文件将保存在fclose上。如果您想先将内容放入文件,请使用fflush()

答案 3 :(得分:1)

假设你在PHP 5.x中工作,请尝试使用file_put_contents(),因为它将open / write / close包装成一个调用。 http://us3.php.net/manual/en/function.file-put-contents.php