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_contents和fwrite; 甚至我的问题也不仅限于此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