可以使用PHP现成的函数flock来实现:

  1. <?php

  2. $fp = fopen("/tmp/lock.txt","w+");

  3. if(flock($fp, LOCK_EX)){// 进行排它型锁定

  4. fwrite($fp,"Write something here\n");

  5. flock($fp, LOCK_UN);// 释放锁定

  6. }else{

  7. echo "Couldn't lock the file !";

  8. }

  9. fclose($fp);

  10. ?>



用flock在写文件前先锁上,等写完后解锁,这样就实现了多线程同时读写一个文件避免冲突。大概就是下面这个流程

  1. /*

  2. *flock(file,lock,block)

  3. *file 必需,规定要锁定或释放的已打开的文件

  4. *lock 必需。规定要使用哪种锁定类型。

  5. *block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。

  6. *lock

  7. *LOCK_SH 要取得共享锁定(读取的程序)

  8. *LOCK_EX 要取得独占锁定(写入的程序)

  9. *LOCK_UN 要释放锁定(无论共享或独占)

  10. *LOCK_NB 如果不希望 flock() 在锁定时堵塞

  11. /*


  12. if (flock($file,LOCK_EX))

  13. {

  14. fwrite($file,'write more words');

  15. flock($file,LOCK_UN);

  16. }

  17. else

  18. {

  19. //处理错误逻辑

  20. }

  21. fclose($file);

  22. )