收到许多请求时,会发生什么?用PHP写入文件?请求排队了吗?或者只有一个被接受而其余的被丢弃了?
我打算使用基于文本的点击计数器。
答案 0 :(得分:6)
您可能会遇到竞争条件
的问题如果您只需要简单的追加数据,可以使用
来避免这种情况file_put_contents(,,FILE_APPEND|LOCK_EX);
并且不要担心您的数据完整性。
如果您需要更复杂的操作,可以使用flock(用于简单的读写器问题)
对于你的PHP脚本计数器,我建议你做这样的事情:
//> Register this impression
file_put_contents( $file, "\n", FILE_APPEND|LOCK_EX );
//> Read the total number of impression
echo count(file($file));
这样您就不必实现阻止机制,并且可以使系统和代码脚本更轻松
为避免必须计算array file()
,您可以使系统更亮:
//> Register this impression
file_put_contents( $file, '1', FILE_APPEND|LOCK_EX );
//> Read the total number of impression
echo filesize($file);
基本上要读取你的计数器的数量,你只需要阅读它的文件大小,考虑到每个印象添加1个字节
答案 1 :(得分:4)
不,请求不会排队,读者会收到数据损坏,编写者会互相覆盖,数据会被损坏。
您可以尝试使用flock的fopen和x
模式
编写好的锁定互斥锁并不是那么容易,因此请尝试查找现有的变量,或者尝试将数据从文件移动到数据库。
答案 2 :(得分:1)
您可以使用flock()在读取/写入文件之前锁定文件。如果其他线程持有文件锁,flock()
将等待其他锁被释放。