Senario:
您有一个文件,每行上都有一个字符串(平均句子价值)。为了争辩,可以说这个文件的大小为1Mb(几千行)。
您有一个脚本来读取文件,更改文档中的某些字符串(不仅是追加,而且还要删除和修改某些行),然后用新数据覆盖所有数据。
问题:
“服务器” PHP,OS或httpd等是否已经有适当的系统来阻止此类问题(在写入过程中进行读取/写入)?
如果可以,请说明其工作原理,并提供示例或相关文档的链接。
如果没有,我是否可以启用或设置某些东西,例如将文件锁定直到写入完成,并且使所有其他读取和/或写入失败,直到上一个脚本完成写入?
我的假设和其他信息:
该服务器正在运行PHP和Apache或Lighttpd。
如果脚本是由一个用户调用的,并且正在写入文件的一半,而另一位用户在该确切时刻读取了文件。阅读该文档的用户将无法获得完整的文档,因为该文档尚未编写。(如果这个假设是错误的,请纠正我)
我只关心PHP写入和读取文本文件,尤其是函数“ fopen” /“ fwrite”,主要是“ file_put_contents”。我查看了“ file_put_contents”文档,但未找到详细程度或对“ LOCK_EX”标志的含义或作用的很好解释。
该方案是最坏情况的一个示例,在该示例中,我认为由于文件的大尺寸和数据的编辑方式,这些问题更有可能发生。我想了解更多有关这些问题的信息,不需要或不需要诸如“使用mysql”或“为什么要这么做”之类的答案或注释,因为我没有这样做,我只想了解文件读/写使用PHP,似乎并没有找到正确的位置/文档,是的,我理解PHP并不是用这种方式处理文件的理想语言。
file_put_contents()
只是fopen()/fwrite()
舞蹈的包装,LOCKEX
就像调用一样flock($handle, LOCKEX)
。