file_put_contents('test.txt',$data,FILE_APPEND|LOCK_EX);
如上語句,假如正在進行大數據量的檔案寫入操作,會佔用較長時間,後續的file_put_contents也要寫入數據,由於檔案具有排他鎖,後續的file_put_contents是否會成為佇列進行等待上一個檔案寫入操作執行完畢
file_put_contents('test.txt',$data,FILE_APPEND|LOCK_EX);
如上語句,假如正在進行大數據量的檔案寫入操作,會佔用較長時間,後續的file_put_contents也要寫入數據,由於檔案具有排他鎖,後續的file_put_contents是否會成為佇列進行等待上一個檔案寫入操作執行完畢
是,file_put_contents的實現其實就是fopen,fwrite,fflush,fclose的這套操作的簡單實現。如果加上LOCK_EX,fopen之後還會執行一個flock,之後這段程式碼會一直阻塞到獲放檔案鎖後才會繼續執行。這個等待是以隊列方式進行排序的.
另外過大的檔案寫入,可能會超過PHP的最大執行事件,有遺失資料的風險,如果資料對你比較重要建議自行實現大資料量的寫入佇列