Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 并发文件读/写_Php_File Io - Fatal编程技术网

Php 并发文件读/写

Php 并发文件读/写,php,file-io,Php,File Io,在PHP中接收到许多读写文件的请求时会发生什么情况?请求是否排队?还是只有一个被接受,其余的被丢弃 我计划使用基于文本的命中计数器。您可能会遇到比赛条件的问题 为了避免这种情况,如果您只需要简单的附加数据,您可以使用 file_put_contents(,,FILE_APPEND|LOCK_EX); 不要担心数据的完整性 如果您需要更复杂的操作,您可以使用(用于简单的读写器问题) 对于PHP脚本计数器,我建议您执行以下操作: //> Register this impression fi

在PHP中接收到许多读写文件的请求时会发生什么情况?请求是否排队?还是只有一个被接受,其余的被丢弃


我计划使用基于文本的命中计数器。

您可能会遇到比赛条件的问题

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

file_put_contents(,,FILE_APPEND|LOCK_EX);
不要担心数据的完整性

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

对于PHP脚本计数器,我建议您执行以下操作:

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

//> Read the total number of impression
echo count(file($file));
这样,您就不必实现阻塞机制,并且可以使系统和代码脚本更轻松

补遗 为了避免计算
数组文件()
的数量,您可以通过以下方法使系统更轻:

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

//> Read the total number of impression
echo filesize($file);

基本上,要读取计数器的数量,您只需读取其文件大小(考虑到每个印象),然后向其添加1个字节即可

您可以使用它在读取/写入文件之前锁定该文件。如果其他线程持有文件锁,
flock()
将等待其他锁释放。

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

您可以尝试使用和的
x
模式。

编写好的锁定互斥锁并不是一件容易的事,所以请尝试查找现有的变量,或者尝试将数据从文件移动到数据库。

是的,我知道您可以为r/w操作锁定一个文件,但如果收到其他两个请求进行读写,这些请求是否会被抛出或排队?文件是否已排队。此外,如果您使用此文件(带文件(附加队列)的“LOCK_EX”,则不会对读取请求进行任何阻塞。这意味着什么?你的意思是只有当我以附加模式打开文件时?使用file_append,写入请求当然会排队。同时,读取请求不会被阻止。@sourav:如果它变成了facebook,也许你会开始使用google analytics^^看看我关于使用情况的回答:。可能会有帮助。如果我错了,请纠正我,但flock不会保证锁的排他性,因为同时有3个作者。。。这在多线程环境中可能会发生(在我的例子中也会发生很多次),比如apache(在fork模式或多线程模式下,都无所谓)、FCGI等等。。。请求#1:flock();fwrite()#2等待锁,fwrite#3同时也在等待锁。写。。。砰,2和3同时写。。。我说的对吗?据我理解,
flock()
在操作系统级别工作,应该是线程安全的。也许有更了解操作系统的人可以证实这一点?你有这个信息的来源吗?似乎与这里的一些其他答案相矛盾,所以我想知道你是怎么知道的。@OZ,你是指
c
而不是
x
标志吗?