多个写入文件

时间:2015-01-13 19:38:30

标签: javascript php

我有一个Web应用程序,当用户单击“保存”时,应该写入文件。该应用程序是“足球调度程序”,因此不止一个玩家可以同时点击保存按钮。

最初我认为这将是罕见的,但事实并非如此,因为当宣布的球员冲进比赛时,因为比赛将在很短的时间内完成。

如果两名玩家同时按下保存会怎样?只有一个玩家的保存才会生效而另一个玩家将会丢失(并且在最后一个可用位置发生这种情况并不罕见,然后会发生冲突)。

我该如何应对这种现象?

//删除了代码,因为它不需要


我想知道在不使用数据库的情况下是否可行。所以也没有接受答案。

2 个答案:

答案 0 :(得分:2)

我认为你会像数据库一样处理这个问题。为文件添加一个锁并等待。

类似的东西:

while (file_exists('file.lock')) {
  usleep(10000);
}
touch('file.lock');
...
unlink('file.lock');

您可能想要添加超时。我认为这样足够安全,但我想两个用户仍然可以在同一时间运行它。在这种情况下,您可能需要在继续之前添加检查其内容已成功保存的内容。

更新:正如Marc B指出的那样,文件锁定似乎包含在php中,直到他指出flock()才知道这个函数。

$fp = fopen("file", "r+");

// try to acquire an exclusive lock, otherwise sleep 10ms before trying again
while (!flock($fp, LOCK_EX)) {  
    usleep(10000);
}

fwrite($fp, "Write something here\n");
fflush($fp);            // flush output before releasing the lock
flock($fp, LOCK_UN);    // release the lock

fclose($fp)

这与我上面写的功能类似。当然不要注意fwrite,我只是从php.net复制了这个例子来展示flock()是如何工作的。

答案 1 :(得分:0)

无法同时写入同一文件。

您可以使用数据库,该数据库可以同时处理多个访问。在我看来,这是处理和访问大量数据的最佳解决方案!

或者您可以将数据存储在单独用户的单独文件中,这些用户都是在某个文件夹中创建的,如果有更多可用文件,请将它们一个接一个地保存,然后再将其删除。然后继续写入主文件,直到没有更多文件可用。这将是一种解决方法,我真的不推荐它,但无论如何,如果你真的不想使用数据库它应该工作。