2012-10-19 93 views
2

我想要更新文件,而其他进程可能正在使用它阅读。 PHP flock()函数允许完全做到这一点。有效的文件更新与羊群和移动

然而,正如我看到羊群只需要一个文件句柄..通常来自fopen。如果我想有效地做到这一点,我不想保持文件打开并写入文件,因为文件通过网络传输,写操作可能会跨越几秒钟(例如2-3秒)。

所以我希望能够将数据写入临时文件然后移动它。在这种情况下,只有在重命名文件时,文件的读者才会感到不安。

现在将数据写入temp不需要我使用群集。然而,我怎样才能使用锁定将tempfile移动到实际文件中。

我也想知道我是否真的需要锁定在第一位..移动操作不会很快吗?会伤害同时读取文件吗?我预计将有100个读取,但只有一个更新,并且该更新每小时发生一次

回答

3

重命名在POSIX系统中是原子的,因此您不需要群集。已经打开文件的读者将不受干扰。 (理由:一个打开的文件句柄指向索引节点,而不是目录条目,重命名只改变目录条目。)

但是,读者必须关闭并重新打开文件才能获取新内容。如果读者保持文件打开,他们将能够重新读取旧内容。