search

Home  >  Q&A  >  body text

php - file_put_contents遇见文件排他锁是是否会队列等待

file_put_contents('test.txt',$data,FILE_APPEND|LOCK_EX);
如上语句,假如正在进行大数据量的文件写入操作,会占用较长时间,后续的file_put_contents也要向该文件写入数据,由于文件具有排他锁,后续的file_put_contents是否会成为队列进行等待上一个文件写操作执行完毕

阿神阿神2786 days ago768

reply all(1)I'll reply

  • 天蓬老师

    天蓬老师2017-04-11 10:45:19

    是,file_put_contents的实现其实就是fopen,fwrite,fflush,fclose的这一套操作的简便实现。如果加上LOCK_EX,fopen之后还会还会执行一个flock,之后这段代码会一直阻塞到获放文件锁后才会继续执行。这个等待是以队列方式进行排序的.

    另外过大的文件写入,可能会超过PHP脚本的最大执行时间,有丢失数据的风险,如果数据对你比较重要建议自行实现大数据量的写入队列

    reply
    0
  • Cancelreply