2010-07-01 185 views
9

这是我的代码:PHP - 将fwrite()立即保存文件?

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

当将文件保存?是在写完之后还是在关闭之后立即进行的?

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

谢谢你的帮助。

回答

3

我做了一小段代码来测试它,看来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检测到新content.And它显示了新的内容,同时作为PHP的输出标签。

+0

好的。至少可以提供一些关于在预定时间之前冲水的可能性。我将根据你的测试结果来处理事情。谢谢生成! – Nirmal 2010-07-01 10:34:35

2

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

9

PHP可能会或可能不会立即写入内容。它们之间有一个缓存层。你可以用fflush()强制它写,但是你不能强迫它等待,除非你只使用一个fwrite()。

+0

确实; OTOH,当你调用fclose()时,它肯定会写内容(和释放文件锁)。 – Piskvor 2010-07-01 09:31:21

+0

@Piskvor:文件夹监视软件何时识别新创建的文件?它会在保存后或锁定释放后进行?这是至关重要的,因为有大约8000个文本块被写入文件,并且监视程序不应该在两者之间的任何地方被触发。感谢您的投入。 – Nirmal 2010-07-01 09:36:20

+0

我不知道,问PrintFil的人。 – Sjoerd 2010-07-01 10:03:36