【发布时间】:2013-03-01 01:24:27
【问题描述】:
我有一个相当基本的 PHP 脚本,可以将数据缓存到文本文件中。我需要想出一个解决方案来防止脚本的两个正在运行的实例同时写入文件。我研究了 PHP 的群功能,但是,PHP 手册 (http://php.net/manual/en/function.flock.php) 提到了一个很大的限制:
在某些操作系统上,flock() 是在进程级别实现的。 当使用像 ISAPI 这样的多线程服务器 API 时,您可能无法 依靠flock() 来保护文件免受其他PHP 脚本运行 在同一服务器实例的并行线程中!
我有两个关于此警告的问题,希望有人能回答。首先,我如何检查我的flock 实现是否在进程级别完成?顺便说一句,我正在使用 cPanel 运行 CentOS。
其次,如果我的实现是在进程级别,这是否意味着我的脚本的一个运行实例不会知道同一脚本的另一个运行实例完成的锁定?还是脚本实例在单独的线程而不是单独的进程上运行?非常感谢您对此进行任何澄清。
谢谢。
【问题讨论】:
-
是否必须缓存到磁盘?使用 APC/memcached 通常更可取。但如果持久性是必需的,则不是。
-
你能检查一下其他脚本是否正在运行吗?您可以写入文件或数据库以说明文件 X 正在使用中,然后在运行脚本之前进行检查
-
达贡所说的很常见。创建一个名为
lock的文件,如果该文件存在,则说明其他人正在使用该文件。
标签: php linux caching cache-control process