在php中跟踪文件中的计数器时可能出现并发问题

在php中跟踪文件中的计数器时可能出现并发问题,php,Php,每次调用我的php脚本时,我都会执行以下操作来跟踪脚本的调用次数: 1.打开纯文本文件 2.从中读取整数 3.增加该值 4.写回值并关闭文件 我觉得当对该脚本同时有1000个请求时,这种方法应该存在并发性问题。某些读/写操作应该失败。但我无法重现任何问题(它似乎可以很好地处理许多请求) 我需要使用任何并发机制吗?您可以使用数据库表。每次调用脚本时,都要插入一个值。您可以获取在PHP中使用mysql_num_rows()调用脚本的次数,或者您可以创建一个每天更新一次文本文件的cronjob 使用表

每次调用我的php脚本时,我都会执行以下操作来跟踪脚本的调用次数:
1.打开纯文本文件
2.从中读取整数
3.增加该值
4.写回值并关闭文件

我觉得当对该脚本同时有1000个请求时,这种方法应该存在并发性问题。某些读/写操作应该失败。但我无法重现任何问题(它似乎可以很好地处理许多请求)


我需要使用任何并发机制吗?

您可以使用数据库表。每次调用脚本时,都要插入一个值。您可以获取在PHP中使用mysql_num_rows()调用脚本的次数,或者您可以创建一个每天更新一次文本文件的cronjob


使用表可以保证存储所有脚本调用。如果在同一时间获取并更新同一个文本文件,则不会发生这种情况(yout将丢失一次命中)。

这是一种竞争条件-您可能只是没有完全正确的条件来发出一个请求并更新另一个请求。您应该使用文件锁定机制来确保每个PHP进程在进行更新时独占使用该文件。但是,由于它只是一个命中计数器,如果出现任何问题,您最多会失去一两次命中。如果您有“1000个对该脚本的同时请求”,显然您使用了错误的解决方案。您可能应该使用某种类型的服务器,可能是SQL server。如果您想继续使用该文件,请在读取该文件时获得该文件的写访问权限,从而锁定该文件。只需锁定该文件即可。记住,墨菲定律,如果任何事情都可能出错,它会出错。我记得我开发了一个聊天程序,并将对话存储在文本文件中,但忘了锁定,这让对话变得一团糟。谢谢。我广泛使用mysql,但我的疑问在于文件编写。我知道使用数据库是更好的解决方案,但我特别考虑php中的竞争条件。