LOCK如何将日志写入平面文件?

Goo*_*bot 5 php concurrency fopen flat-file fwrite

读取平面文件的并发性几乎是无限的(如果我错了,请纠正我); 但是写入的并发性如何?考虑在PHP中编写一个简单的访问日志(用于访问),以附加一行以.结尾的访问详细信息\n

fopen(); // in append mode
fwrite();
fclose();
Run Code Online (Sandbox Code Playgroud)

由于我们有并发访问者,系统(一个用户是wbserver/php用户)如何同时写入视图日志?

我的困惑是:函数file_put_contents()(这是上述三个函数的包装)有一个lock(LOCK_EX)选项吗?使用这种锁定选项是否有益?这将如何影响日志写作?

更新:我的问题是关于LOCK最初如何工作/影响将日志写入文件.我不比较file_put_contentsfwrite; 甚至我的问题也不仅限于此PHP.问题是在写入过程中锁定文件.

小智 3

file_put_contents()确实有一个锁定选项,但在我看来,你应该使用flock()

来自手册:

可用标志

FILE_USE_INCLUDE_PATH
在包含目录中搜索文件名。有关详细信息,请参阅 include_path。

FILE_APPEND 如果文件 filename 已存在,则将数据附加到文件而不是覆盖它。

LOCK_EX 在继续写入时获取文件的独占锁。

flock()允许您使用其他方法:

LOCK_SH获取共享锁(读取器)。
LOCK_EX获取独占锁(写入器)。
LOCK_UN释放锁(共享或独占)。

请参阅此处: http: //php.net/manual/en/function.flock.php和此处: http: //php.net/manual/en/function.file-put-contents.php