文件操作中的并发访问问题 可以被打开多次,但是写入的时候最好有个先后顺序像mysql写入的时候可以有锁定的功能最好在代码中也保护一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你两个函数作为例子,应该没有问题了function readfromfile($file_name) { $filenum=fopen($file_name,"r"); flock($filenum,LOCK_SH); $file_data=fread($filenum,filesize($file_name)); fclose($filenum); return $file_data; } function writetofile($file_name,$data,$method="w") { $filenum=fopen($file_name,$method); flock($filenum,LOCK_EX); $file_data=fwrite($filenum,$data); fclose($filenum); return $file_data; } to: abin30(阿斌) 根据函数中flock第二个参数的不同,读文件的时候可以多个用户同时读,写文件的时候只能一个用户写。那么在这个用户写文件的时候,其他用户如果也有写文件的操作,会发生什么情况呢?我在单机上,没有实验过,请讲一讲好吗? 和用户没关系,根进程有关系吧?如果文件被lock了,其他php程序会等候unlock to:qsnake(开工) 我 说的 “用户 ”和你说的 “进程 ”是同一个概念。可以理解为另一个 对该文件的请求。是不是等候unlock之后,就可以正常操作了呢?比如一个文本计数器,计数文件被lock了,那么会不会因此减少计数? 等候unlock后就可以正常操作,这就是阻塞的工作模式,如果不想阻塞模式,可以在flock的参数中指定LOCK_NB,那样的话其他用户不再等待而是放弃操作。 通常情况下,其他用户等候unlock后就可以正常操作,这就是阻塞的工作模式,如果你不想这样,可以在flock函数中指定LOCK_NB参数,则其他用户不再等待而是放弃操作 我再补充一点:可以用一个文件是否存在作为是否有其他进程访问文件的标志。每个进程在访问前,察看该文件是否存在。如果不存在表示没人访问,建立该文件,。否则循环,等文件操作完成后再删除。eg. while(file_exists($lock_file))$p++; flcose(fopen($lock_file,"w")); $tmp=file($file); unlink($lock_file);这其中有个while 循环 可能在进程很多的时候加重负担,, PHP解析.Net的webservice返回的dataset linux中,mysql错误日志 在线等 这样写,为什么查不出来?求解! 正则表达式简单问题求指导 CURL 抓取网页问题 php生成图片的问题 本人新手,求大神帮我解决 php中类的问题(高分求教) 招聘,高薪 我用php做网站出现问题 。祈求帮忙! 请教一个表单提交的问题 MFC ODBC问题-------挑战高手,挑战极限!!!
function readfromfile($file_name) {
$filenum=fopen($file_name,"r");
flock($filenum,LOCK_SH);
$file_data=fread($filenum,filesize($file_name));
fclose($filenum);
return $file_data;
}
function writetofile($file_name,$data,$method="w") {
$filenum=fopen($file_name,$method);
flock($filenum,LOCK_EX);
$file_data=fwrite($filenum,$data);
fclose($filenum);
return $file_data;
}
根据函数中flock第二个参数的不同,读文件的时候可以多个用户同时读,写文件的时候只能一个用户写。那么在这个用户写文件的时候,其他用户如果也有写文件的操作,会发生什么情况呢?我在单机上,没有实验过,请讲一讲好吗?
如果文件被lock了,其他php程序会等候unlock
我 说的 “用户 ”和你说的 “进程 ”是同一个概念。可以理解为另一个 对该文件的请求。
是不是等候unlock之后,就可以正常操作了呢?比如一个文本计数器,计数文件被lock了,那么会不会因此减少计数?
可以用一个文件是否存在作为是否有其他进程访问文件的标志。
每个进程在访问前,察看该文件是否存在。如果不存在
表示没人访问,建立该文件,。否则循环,等文件操作完成后再删除。
eg.
while(file_exists($lock_file))$p++;
flcose(fopen($lock_file,"w"));
$tmp=file($file);
unlink($lock_file);
这其中有个while 循环 可能在进程很多的时候加重负担,,