可以被打开多次,但是写入的时候最好有个先后顺序
像mysql写入的时候可以有锁定的功能
最好在代码中也保护一下

解决方案 »

  1.   

    给你两个函数作为例子,应该没有问题了
    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; 

      

  2.   

    to: abin30(阿斌) 
    根据函数中flock第二个参数的不同,读文件的时候可以多个用户同时读,写文件的时候只能一个用户写。那么在这个用户写文件的时候,其他用户如果也有写文件的操作,会发生什么情况呢?我在单机上,没有实验过,请讲一讲好吗?
      

  3.   

    和用户没关系,根进程有关系吧?
    如果文件被lock了,其他php程序会等候unlock
      

  4.   

    to:qsnake(开工) 
    我 说的 “用户 ”和你说的 “进程 ”是同一个概念。可以理解为另一个 对该文件的请求。
    是不是等候unlock之后,就可以正常操作了呢?比如一个文本计数器,计数文件被lock了,那么会不会因此减少计数?
      

  5.   

    等候unlock后就可以正常操作,这就是阻塞的工作模式,如果不想阻塞模式,可以在flock的参数中指定LOCK_NB,那样的话其他用户不再等待而是放弃操作。
      

  6.   

    通常情况下,其他用户等候unlock后就可以正常操作,这就是阻塞的工作模式,如果你不想这样,可以在flock函数中指定LOCK_NB参数,则其他用户不再等待而是放弃操作
      

  7.   

    我再补充一点:
    可以用一个文件是否存在作为是否有其他进程访问文件的标志。
    每个进程在访问前,察看该文件是否存在。如果不存在
    表示没人访问,建立该文件,。否则循环,等文件操作完成后再删除。
    eg.
       while(file_exists($lock_file))$p++;
       flcose(fopen($lock_file,"w"));
       $tmp=file($file);
       unlink($lock_file);
    这其中有个while 循环 可能在进程很多的时候加重负担,,