如果PHP脚本想要执行以下操作,会发生什么?
file_put_contents("testfile", $s, FILE_APPEND | LOCK_EX);
而另一个脚本已经在同一文件上执行了相同的操作(也带有一个LOCK_EX
)?
不太可能发生两个脚本要在同一毫秒内精确写入(对于<100 kB文件)的情况,但让我们想象一下它发生了。
请问file_put_contents
功能察觉到它的锁定,等待10ms的说,然后重试,或将PHP脚本失败,并要写入的数据丢失?
flock()
在开始写入之前,这两个进程都将调用以锁定文件。第一个将获得锁定,第二个将等待直到文件被解锁。无需重试,它由操作系统自动处理。该文档没有提及超时,因此我假设没有超时。
完成写入后,第一个过程将解锁文件,然后运行第二个过程。
您一般不需要LOCK_EX
,如果你使用FILE_APPEND
。每次对write()
原子的调用都是原子的,并且在以追加模式打开文件时,文件系统确保每个进程在新文件末尾(而不是在文件打开时的EOF位置)进行写入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句