文件操作中的并发访问问题 可以被打开多次,但是写入的时候最好有个先后顺序像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 循环 可能在进程很多的时候加重负担,, varchar字段不能设置default值? SQL语句中能不能用for循环 php页面返回到ajax提交页面的是乱码 <?=$row[content]?> 这句是什么意思<?=?> PHP异常处理 连接数据库的问题 正则表达式preg_replace用法问题,求助! 请帮忙看看这小段代码错在哪里? 我怀疑是不是apache2.0.54的问题 打算换个1.3.33的看看 如何确定一个PHP的系统只能在一台电脑上面使用? 我是刚刚才学完HTML语言的,想学一学PHP当对于APCHE的服务器如何配置?? 请教一个表单提交的问题 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 循环 可能在进程很多的时候加重负担,,