Php 同步文件访问
使用:Php 同步文件访问,php,Php,使用: 如果两个用户试图同时打开同一个文件,会发生什么情况?是的,您可以同时打开两个文件,除非您锁定文件[flock]。然而,聚集文件的最佳时间是在您写入文件时,或者如果您选择在任何一点只允许一个用户查看文件。重要的是: 当他们写作时会发生什么 如果(a)读,(b)读然后(b)写然后(a)写会发生什么?(a)的写入是否无效,因为它的计算不再从最新状态派生 经典示例是许多文本中使用的示例 任何类型的共享可写状态都需要某种形式的并发访问控制,如a,但存在大量的潜在问题,如、饥饿和上的变化 然而,许多
如果两个用户试图同时打开同一个文件,会发生什么情况?是的,您可以同时打开两个文件,除非您锁定文件[flock]。然而,聚集文件的最佳时间是在您写入文件时,或者如果您选择在任何一点只允许一个用户查看文件。重要的是:
根据您的原因,您可能需要考虑一个数据库,例如,或将提供“强”>“更快”、“更健壮”、“<强”>共享重读或无缓存的状态的方式。
分享国家的众多问题、陷阱和方式是巨大的。为维基百科的使用道歉。经常发生。但是,问题的答案取决于双方对打开的文件的具体操作。可能的行动/解决方案将完全取决于此要求 小规模文件操作非常快,几乎不可能同时进行两次写入。无论如何,您可以使用
flock
锁定文件:
fopen
fwrite
fclose
注意fclose
会自动解锁文件,但我发现这样做会使代码更易于使用,可以将这些东西放入其中。使用文件附加
或锁定
标志。
任何这些标志都会锁定文件进行写入。我不确定确切答案。但是,是的,有人尝试过这个。这也取决于操作系统。这几乎就是MySQL 3.x在web开发早期如此流行的全部原因。如果解释器锁定了文件,但在解锁之前,服务器死亡,因此无法解锁会怎么样?:)@noname-是的。锁定系统通常需要仲裁、达成共识并处理这些事情。
$fp = fopen('file.log', 'a+');
flock($fp, LOCK_EX);
fwrite($fp, 'my data');
flock($fp, LOCK_UN);
fclose($fp);