PHP群聚函数限制和txt缓存文件


PHP flock function limitations and txt cache files

我有一个相当基本的PHP脚本,它将数据缓存到一个文本文件中。我需要提出一个解决方案,防止两个运行的脚本实例从写入文件在同一时间。我研究了PHP flock函数,但是PHP手册(http://php.net/manual/en/function.flock.php)提到了一个很大的限制:

在某些操作系统上,flock()是在进程级实现的。当使用多线程服务器API(如ISAPI)时,您可能无法做到依赖flock()来保护文件不受其他PHP脚本运行的影响在同一个服务器实例的并行线程中!

关于这个警告,我有两个问题,我希望有人能回答。首先,如何检查flock的实现是否在流程级别完成?顺便说一句,我正在运行CentOS,与cPanel。

第二,如果我的实现是在进程级别,这是否意味着我的脚本的一个运行实例将不知道由同一脚本的另一个运行实例执行的锁?或者脚本实例运行在单独的线程上,而不是单独的进程上?如能对此作出澄清,我将不胜感激。

谢谢。

唯一常见的情况是运行Apache,使用某种线程(非分叉)npm。99%的情况下,你没有运行PHP线程。这是一个相对安全的假设

除此之外,可能值得尝试避免锁定…

最大的问题是两个进程可能同时写入,或者一个进程在缓存未完全生成时读取缓存。解决这个问题的最简单方法是让PHP脚本在临时位置的另一个文件中生成缓存。写入文件后,只需将其移动到适当的位置(使用rename())。当文件移动发生在同一个挂载上时,保证文件移动是原子的。