gpt4 book ai didi

php - 使用 flock 和 move 进行高效的文件更新

转载 作者:行者123 更新时间:2023-12-04 05:27:57 27 4
gpt4 key购买 nike

我想更新一个文件,而其他进程可能正在使用它来读取它。 PHP flock()功能允许完全做到这一点。

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

所以我希望是否可以将数据写入临时文件然后移动它。在这种情况下,文件的读者只会在我重命名它时受到干扰。

现在将数据写入 temp 不需要我使用 flock。但是,如何使用锁定将临时文件正确移动到实​​际文件。

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

最佳答案

Rename 在 POSIX 系统中是原子的,所以你不需要 flock。已经打开文件的读者不会受到干扰。 (理由:打开的文件句柄指向 inode,而不是目录条目。重命名仅更改目录条目。)

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

关于php - 使用 flock 和 move 进行高效的文件更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12978213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com