当我尝试增加变量时,PHP制作空白文件?

时间:2014-02-19 20:31:43

标签: php file increment race-condition

我最近制作了一个PHP程序来计算使用我创建的程序在线的用户数量。它的工作原理如下:

  1. 客户端向服务器发送注册请求(registerMember.php)
  2. 服务器检查用户是否已在线
  3. 如果用户尚未在线,请在文件中增加一个数字
  4. 将人员用户名写入文本文件
  5. 我的问题是很多人会在同一时间注册,这会创建一个空白文件。

        $file_handle = fopen("registeredMembers", "r");
        while (!feof($file_handle)) {
            $line = fgets($file_handle);
            $line++;
            $fp = fopen('registeredMembers', 'w');
            fwrite($fp, $line);
            fclose($fp);
        }
    

    这种情况正在发生,因为有两个请求同时发生,并且在程序写入变量的递增版本之前,另一个请求在写入之前读取了空白文件。有没有更好的方法可以做到这一点?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

在打开文件后尝试使用flock阻止该文件(请参阅内部示例)。