2012-08-02 49 views
4

我使用PHP的fputcsv在我们正在制作的应用程序中记录投票。我的代码的保存部分粗略地重新排列这一点:可能一次写入多个PHP文件中的同一个文件?

$handle = fopen('votes.csv', 'a'); 
fputcsv($handle, $data); 
fclose($handle); 

这在测试中完美无缺地工作。但是,我有一个小问题。在生产环境中部署时,很多用户可能会同时向这个脚本发出请求。我很好奇PHP如何处理这个问题。

我可能会遇到问题,并因此而失去投票吗?如果是这样,我能做些什么来防止它呢?解决方案比简单使用数据库更复杂吗?最后,我该如何测试这种情况,哪里会同时提出很多请求?有没有测试这类东西的东西?

+1

使用!a!数据库! (对于那些,你还没有注意到它:'SQLite'是无服务器的,并在默认情况下在PHP中启用)。用它! – KingCrunch 2012-08-02 14:42:37

+0

尝试[这篇文章](http://www.webmasterworld.com/php/3165926.htm)。 – Matt 2012-08-02 14:42:56

+0

在继续之前检查'fopen'是否失败。 – Jocelyn 2012-08-02 14:43:33

回答

3

写入文件可能会导致并发用户出现问题。如果您改为插入数据库,则可以让数据库自己处理队列。如果用完连接,它很容易被跟踪,并且您可以随时查看db上的负载。

在数据库中的插入比源文件的附加要少资源。话虽如此,你需要非常沉重的负载才能生效 - 但是对于数据库,您可以使用查询队列中的内部版本来缓解并发压力的很大一部分。

当您向数据库发送请求时,它实际上会进入队列进行处理。只有当你的PHP代码有一个超时时才会被执行(基本上,PHP被告知放弃等待数据库响应 - 你可以通过PHP和Apache设置来控制它),所以你有一个梦幻般的内置缓冲。

相关问题