使用:
fopen
fwrite
fclose
如果两个用户同时尝试打开同一个文件会怎样?
答案 0 :(得分:6)
小规模文件操作非常快,以至于两次写入完全相同。无论如何,您可以使用flock
来锁定文件:
$fp = fopen('file.log', 'a+');
flock($fp, LOCK_EX);
fwrite($fp, 'my data');
flock($fp, LOCK_UN);
fclose($fp);
注意fclose
会自动解锁文件,但我发现它可以让代码更加用户友好。
答案 1 :(得分:3)
重要的是:
经典示例是许多文本中使用的 Cash machine/bank balance 示例。
任何共享可写状态都需要某种形式的并发访问控制,例如mutex,但是存在大量潜在问题,例如 race conditions ,饥饿和 dining philosophers problem 的变体。
然而,许多操作系统允许 File locking 某些描述,这意味着其他进程等待释放锁定。请参阅 PHP's flock() for locking a file.
您还可以使用“结帐,更改,提交/合并”方法。
根据您的原因,您可能需要考虑MySQL或SQLite等数据库,因为这些数据库将提供更快,更强大的方式来共享已读取的状态 - 无需缓存或无缓存。
众多问题,陷阱和分享国家的方式是巨大的。为所有维基百科的使用道歉。
答案 2 :(得分:3)
使用file_put_contents()
代替FILE_APPEND
或LOCK_EX
标记。
这些标志中的任何一个都会锁定文件以进行写入。
答案 3 :(得分:1)
是的,您可以同时打开两个文件,除非您锁定文件[flock]。然而,聚集文件的最佳时间是在您写入文件时,或者如果您选择仅允许一个用户在任何一个点查看文件。
答案 4 :(得分:1)
一直发生。但是,您的问题的答案取决于对打开的文件究竟想要/想要做什么。可能的行动/解决方案完全取决于此要求。