并发文件读/写

Sou*_*rav 9 php file-io

当收到许多读取和写入PHP文件的请求时会发生什么?请求排队了吗?或者只接受一个,其余的被丢弃?

我打算使用基于文本的点击计数器.

dyn*_*mic 6

你可以遇到竞争条件的问题

如果您只需要简单的附加数据,可以避免这种情况

file_put_contents(,,FILE_APPEND|LOCK_EX);
Run Code Online (Sandbox Code Playgroud)

并且不要担心您的数据完整性.

如果您需要更复杂的操作,可以使用flock(用于简单的读写器问题)

对于你的PHP脚本计数器,我建议你做这样的事情:

//> Register this impression
file_put_contents( $file, "\n", FILE_APPEND|LOCK_EX );

//> Read the total number of impression
echo count(file($file));
Run Code Online (Sandbox Code Playgroud)

这样您就不必实现阻塞机制,并且可以使系统和代码脚本更轻松

附录

为了避免不得不计数,array file()你可以保持系统更轻:

//> Register this impression
file_put_contents( $file, '1', FILE_APPEND|LOCK_EX );

//> Read the total number of impression
echo filesize($file);
Run Code Online (Sandbox Code Playgroud)

基本上读取你的计数器的数量,你只需要读取它的文件大小,考虑到每个印象添加1个字节


OZ_*_*OZ_ 5

不,请求不会排队,读取器将获得损坏的数据,写入器将相互覆盖,数据将被损坏。

您可以尝试使用flockfopenx模式。 编写好的锁定互斥锁不是那么容易,所以尝试找到现有的变体,或者尝试将数据从文件移动到数据库。