Php 如果其他进程锁定了文件,如何使flock阻塞?

Php 如果其他进程锁定了文件,如何使flock阻塞?,php,flock,Php,Flock,我有一个JavaScript应用程序,可以向服务器发送消息。我必须在服务器端收集这些消息,然后分析它们,所以我只是将它们写入文件。问题是,当我打开文件阅读时,即在记事本中,信息没有被写入。由于flock()正在阻塞,并且锁在Windows上应该是必需的,所以我希望脚本只需等待关闭文件,然后保存所有挂起的消息,但它似乎不是这样工作的。是否有办法确保所有消息最终都会保存到该文件中,即使其他进程以独占方式访问该文件?我不能丢失任何消息,即使有人打开文件阅读或复制它。我可以用PHP来实现它吗,或者我应该

我有一个JavaScript应用程序,可以向服务器发送消息。我必须在服务器端收集这些消息,然后分析它们,所以我只是将它们写入文件。问题是,当我打开文件阅读时,即在记事本中,信息没有被写入。由于flock()正在阻塞,并且锁在Windows上应该是必需的,所以我希望脚本只需等待关闭文件,然后保存所有挂起的消息,但它似乎不是这样工作的。是否有办法确保所有消息最终都会保存到该文件中,即使其他进程以独占方式访问该文件?我不能丢失任何消息,即使有人打开文件阅读或复制它。我可以用PHP来实现它吗,或者我应该改为向数据库发送消息?PHP版本为7.0.4,我的脚本如下所示:
$f = fopen('log.csv', 'a+');
flock($f, LOCK_EX);

$text = date('Y-m-d H:i:s'). ";" .htmlspecialchars($_POST["message"]). PHP_EOL;
clearstatcache();

fwrite($f, $text);
fflush($f);

flock($f, LOCK_UN);
fclose($f);

?>

flock在成功时返回true,在失败时返回false

while(!flock($f, LOCK_EX)) {
  sleep(5);
}

如果另一个进程锁定了脚本很长时间,这并不能解决脚本超时的问题。在这种情况下,您可能希望关闭该文件并尝试打开其他文件名。

我希望所有文件都放在一个地方。如果其他进程锁定了第二个文件,这也不会有帮助。。。