在PHP中获取文件锁时应该使用循环吗?


Should I use a loop when acquiring file lock in PHP?

我想创建一个简单的方法来将字符串写入日志文件,由于文件可能同时由不同的web服务器进程写入,因此需要文件锁定以实现原子性。

function log_to_file($message)
{
   $fp = fopen("/tmp/lock.txt", "r+");
   while (!flock($fp, LOCK_EX)) {
     sleep(1); // Sleep for 1 second and try again
   }
   fwrite($fp, $message);
   fflush($fp);            
   flock($fp, LOCK_UN);    // release the lock
   fclose($fp);
}

以上代码有问题吗?

我使用error_log('我的日志消息',3,$logFile);为了同样的目的。我在peek时间达到每秒300个写请求,持续了大约两个月,仍然没有任何文件锁定问题。