如何将file_put_contents()与FILE_APPEND |一起使用LOCK_EX安全吗?

时间:2012-01-19 14:40:43

标签: php writing file-handling

我正在使用:

file_put_contents("peopleList.txt", $person, FILE_APPEND | LOCK_EX);

写入文件末尾并确保没有其他人(或脚本)同时写入同一文件。

PHP manual表示如果不成功,它将返回假值。

如果它无法锁定文件,它会失败还是继续尝试直到它可以?如果在无法获得锁定时失败,那么确保数据写入的最佳方法是什么?

也许在while循环中循环该函数,直到它不返回false(cringe)或者只是向用户(网站访问者)提供某种GUI请求他们再试一次?

2 个答案:

答案 0 :(得分:4)

实际上,我之前的回答有点过时了。 flock()阻止requested lock is acquired

  

PHP支持以咨询方式锁定完整文件的可移植方式(这意味着所有访问程序必须使用相同的锁定方式,否则将无法工作)。默认情况下,此功能将阻止,直到获取所请求的锁定为止;这可以通过下面记录的LOCK_NB选项进行控制(在非Windows平台上)。

因此,file_get_contents()使用它,我认为它是相同的。也就是说,请注意它因操作系统而异。

更重要的是,您不需要在您描述的场景中锁定文件,原因是N.B.已经解释过了除非您使用CLI SAPI,否则我不会想到您应该担心文件锁定的常见情况。

答案 1 :(得分:0)

如果该函数无法获取该文件的锁定,则它将返回您可以使用的错误。

if ($result === false) { print "failed to lock"; }

现在,如果您想尝试获取锁定几次,只需使用循环继续尝试写入文件。