PHP:你能读一个有独占锁的文件吗?

时间:2011-12-07 09:18:03

标签: php locking

据我所知,当您通过flock($handle, LOCK_EX)向用户提供对文件的独占锁定时,您可以阻止其他人写入该文件,直到它被释放。

但是其他人是否仍然可以打开共享锁来读取文件? e,g,flock($handle, LOCK_SH)

这适用于平面文件数据库系统,我希望人们能够在有人写信的情况下仍然查询数据库,但不要让多人立即写入数据库。

1 个答案:

答案 0 :(得分:0)

文件使用" file_get_contents"忽略任何文件锁定。在实践中," file_get_contents"读到文件的末尾(如果你当时正在写它,它会读取它可以获得的内容并返回它)。

文件使用" fread"或" fgets"也会这样做,但你可以使用" flock"首先要确保文件没有锁定,但仍有机会参加比赛。

您实际面临的最大问题是并非所有Linux服务器都支持它,因为" flock"使用" advisory" 的系统调用,因此在某些服务器上简单地忽略(通过不锁定任何文件)。那些像SQLite或MySQL这样的数据库服务器通过提供自己不依赖于服务器的锁定机制而进入的地方 - 大多数时候 - 在避免可能破坏的竞争条件方面也更聪明你的flatfile数据库。