การ lock file ใน php ทำเพื่อป้องกันไม่ให้คนอื่นมาอ่านหรือเขียน ในขณะที่เรากำลังอ่านหรือเขียนอยู่ โดยเราจะใช้ function ที่ชื่อว่า flock ตัว flock จะเป็นตัวจัดการว่ามีคนอ่านหรือเขียน file นี้อยู่หรือไม่ ประโยชน์ของมันคือการเขียนทีละครั้งจะทำให้ข้อมูลไม่เกิดข้อผิดพลาดกรณีที่ write 2 ตัวพร้อมกันและข้อมูลไม่เหมือนกันครับ แต่โทษของมันคือการ deadlock คือหากเราลืม unlock หรือไปไม่ถึงขั้นนั้นจะทำให้คนอื่นๆเขียนไม่ได้เช่นกันครับ
boolean flock(file_resource handler,int operation,int &wouldblock);
อธิบายง่ายๆคือ
return ค่าเป็น true หากล็อคได้ และ false ถเาล็อคไม่ได้
<?php $fp = fopen("lock.txt", "w+"); if (flock($fp, LOCK_EX | LOCK_NB )) { ftruncate($fp, 0); // truncate file fwrite($fp, "Write heren aaa adsasd \n"); fflush($fp); // flush output before releasing the lock sleep(10); flock($fp, LOCK_UN | LOCK_NB ); // release the lock } else { echo "Couldn't get the lock!"; } fclose($fp); ?>
จาก code นี้ถ้าสั่งเรียก file นี้ 2 ครั้งติดๆกันจะเห็นว่าครั้งที่ 2 จะขึ้นว่าไม่สามารถ lock ได้ครับ