<?php$fp = fopen("/tmp/lock.txt", "w+");if (flock($fp, LOCK_EX)) { // 进行排它型锁定
    fwrite($fp, "Write something here\n");
    flock($fp, LOCK_UN); // 释放锁定
} else {
    echo "Couldn't lock the file !";
}fclose($fp);?>
以上是PHP手册里的例子啊,我运行了OK啊!
锁定文件,是进程锁定,页面执行完成,进程结束,不就不存在锁定了么!

解决方案 »

  1.   

    警告: 
    flock() 不能用于 NFS 以及其它一些网络文件系统。详细资料查看自己操作系统的文档。 在部分操作系统中 flock() 以进程级实现。当用一个多线程服务器 API(比如 ISAPI)时,可能不可以依靠 flock() 来保护文件,因为运行于同一服务器实例中其它并行线程的 PHP 脚本可以对该文件进行处理。 flock() 不支持旧的文件系统,如 FAT 以及它的派生系统。因此,此环境下总是返回 FALSE(尤其是对 Windows 98 用户来说)。
      

  2.   

    //fclose($fp);把注释去了
    使用完锁后要释放锁,否则当然会出你那问题了!
      

  3.   

    更正是这句//flock   ($fp,   LOCK_UN); 注释去掉 
      

  4.   

    <?php   
    $fp   =   fopen   ('./data.txt',"a+");   
    $islock   =   flock   ($fp,   LOCK_EX);   锁定文件,只有本进程有权写入。   
    if($islock   ===   false)   //判断文件是否被锁定。   
    {   
    /*   
    去掉了一些处理不能锁定时的代码...   
    */   
    echo   'NO!';   
    //fclose($fp);   
    }   
    else   {   
    fwrite   ($fp,   "soming...\r");   
    //flock   ($fp,   LOCK_UN);   
    //fclose($fp);   
    echo   'OK!';   
    }   
    ?>大家仔细看看我的问题,这段代码测试的目的是flock,当我执行xx.php后不解锁,不关文件。让另外的人接着访问xx.php,结果还是显示“OK!!!”,手册里不是说只有当前进程才有权吗?就是搞不懂写与不写flock有什么区别?
      

  5.   

    我在MYSQL里面用INNODB锁定,结果本机锁定正常,但是到服务器上面我这边线程锁定,那边也是一样可以访问,顺便关注
      

  6.   

    注意在手册上有“在 Windows 下 flock() 将会强制执行。”这句话,你的系统是否是windows?我的理解是当你写结束在windows下会强制执行flock()。你可以试试linux下是否也是一样,我没有linux系统。
      

  7.   

    呵呵!本人经过测试认为flock()在windows下并不能实现互斥,(linux没试过)
    测试以下代码:
    <?php$fp = fopen("lock.txt", "w+");if (flock($fp, LOCK_EX))
    {
      echo "lock the file 1 !";
       if (flock($fp, LOCK_EX)){echo "<br>lock the file 2 !";}
    }
    if (flock($fp, LOCK_EX))
    {
    echo "<br>lock the file 3 !";
    }
    ?>
    结果:
    lock the file 1 !
    lock the file 2 !
    lock the file 3 !
      

  8.   

    实践结果:问题在于,flock()这个函数不好使。 
    这是由PHP先天决定的。 
    用户A访问你的程序后,PHP在服务器端会启动一个线程,flock这个函数只能在当前线程中锁住这个文件。 
    同时,如果有另外的用户B也访问了这个程序,PHP会再启动一个线程 ,flock只对B的线程起作用.A和B之间互不影响。A此时,A线程对文件的锁定不影响 B对文件的操作!