[Linux上的PHP 7]
我试图在几个异步运行的PHP脚本之间创建一个共享配置文件。
一个脚本是" Writer"。它将知道新配置数据何时可用,并负责将此配置写入共享配置文件。没有其他脚本有权写入该文件。配置包含JSON字符串,应该用单个fwrite()或file_put_contents()编写。
数据太小,引入数据库引擎或其他过于复杂的共享机制似乎有点过分。
所有其他脚本("读者")需要能够随时打开文件并阅读内容并确保内容完整(不在编写过程中)。
flock()的问题在于,如果任何Reader打开文件并使用LOCK_SH,则Writer无法在文件上获取LOCK_EX,并将阻止。由于读者随机打开文件,可能会有重叠,并且可能永远不会是所有读者释放文件的时间,因此Writer可能会无限期地等待,而不会对文件进行独占锁定。
Writer必须能够在新配置适用时更新配置,但如果任何读者尝试在更新期间打开配置(或者正在读取现有文件的过程中),他们仍然应该看到以前的完整文件,而不是空白或部分写入的文件。
最好是将更新的配置写入临时文件,然后使用rename()替换现有文件? (rename() appears to be an atomic operation when performed within a file system.)
感谢您的任何建议。