首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个写入文件

多个写入文件
EN

Stack Overflow用户
提问于 2015-01-13 19:38:30
回答 2查看 65关注 0票数 0

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

一开始我以为这会是一件稀罕的事,但事实并非如此,因为比赛在宣布的球员中蜂拥而至,因为比赛将在短时间内爆满。

如果两个玩家同时按下保存会发生什么?只有一个玩家的扑救生效,而另一个球员会输掉(在最后一个可用位置上发生这种情况并不少见,然后就会有一些冲突)。

我该如何处理这种现象呢?

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

我想知道,如果不使用数据库,这是可能的。因此,我们也接受一个否定的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-13 19:48:50

我想您应该像处理数据库一样处理这个问题。向文件中添加一个锁并等待。

类似于:

代码语言:javascript
复制
while (file_exists('file.lock')) {
  usleep(10000);
}
touch('file.lock');
...
unlink('file.lock');

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

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

代码语言:javascript
复制
$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()是如何工作的。

票数 2
EN

Stack Overflow用户

发布于 2015-01-13 19:44:49

不可能同时写入同一个文件。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27930164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档