PHP: Lock File ไม่ให้คนอื่นมาอ่านหรือเขียน

การ lock file ใน php ทำเพื่อป้องกันไม่ให้คนอื่นมาอ่านหรือเขียน ในขณะที่เรากำลังอ่านหรือเขียนอยู่ โดยเราจะใช้ function ที่ชื่อว่า flock ตัว flock จะเป็นตัวจัดการว่ามีคนอ่านหรือเขียน file นี้อยู่หรือไม่ ประโยชน์ของมันคือการเขียนทีละครั้งจะทำให้ข้อมูลไม่เกิดข้อผิดพลาดกรณีที่ write 2 ตัวพร้อมกันและข้อมูลไม่เหมือนกันครับ แต่โทษของมันคือการ deadlock คือหากเราลืม unlock หรือไปไม่ถึงขั้นนั้นจะทำให้คนอื่นๆเขียนไม่ได้เช่นกันครับ

รูปแบบ Function flock()

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 ได้ครับ

Exit mobile version