【发布时间】:2012-02-19 00:16:44
【问题描述】:
我正在使用:
file_put_contents("peopleList.txt", $person, FILE_APPEND | LOCK_EX);
写入文件末尾并确保没有其他人(或脚本)同时写入同一文件。
PHP manual 表示如果不成功,它将返回一个虚假值。
如果它无法获得对文件的锁定,它会失败还是继续尝试直到可以获得?如果在无法获得锁的情况下确实失败了,那么确保写入数据的最佳方法是什么?
也许在 while 循环中循环该函数,直到它不返回 false(畏缩)或只是为用户(网站访问者)提供某种 GUI 请求他们再试一次?
【问题讨论】:
-
Apache 生成一个执行 PHP 进程的线程。多个用户 = 多个 PHP 进程。获得锁的进程是唯一允许使用该文件的进程。所有其他进程将收到来自 file_put_contents 函数的错误,并且这些用户发出的 file_put_contents 不会向文件写入任何内容。这意味着当 1 个用户正在写入时,其他用户被拒绝并且该函数将返回布尔值
false。 -
LOCK_EX 存在的原因完全是另一个话题。如果您无论如何都想写入文件,只需删除 LOCK_EX 因为您不需要它,最后访问您的网站/脚本的人将是将数据写入文件的人。另外,既然你正在做追加 - 锁定文件的意义何在?只需将其删除。
-
我同时使用 LOCK_EX 和 FILE_APPEND 是因为其他脚本能够写入文件,而当数据被附加到文件时,我无法做到,反之亦然。
-
是否所有脚本都将数据附加到文件中?
-
不,有些会覆盖,有些只会读取。
标签: php writing file-handling