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);

อธิบายง่ายๆคือ

  • file_resurce คือตัวแปรที่มาจาก fopen อ่ะครับ
  • operation จะเป็นค่าคงตัวซึ่งเค้ากำหนดมาดังนี้ครับ
    LOCK_SH คือ ไม่ให้คนอื่นอ่าน
    LOCK_EX คือ ไม่ให้คนอื่นเขียน
    LOCK_UN คือปลดล็อค (แต่ถ้าใช้ lock ผมว่ามันกันได้ทั้งอ่านและเขียน)
    LOCK_NB คือบอกว่าไม่อนุญาติให้คนอื่นใช้งานตอนล็อคอยู่ทันที(ถ้าไม่ใส่ตัวนี้ คนอื่นจะรอจนกว่าจะ unlock ถึงจะอ่านเขียนได้ แต่ถ้าใส่จะ return false ทันที
  • 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 ได้ครับ

FengOffice โปรแกรม Project Management แบบ Web Based ที่ดีที่สุด(มั้ง)

[OUTDATED ไม่ต้องอ่านครับ เสียเวลา ผมเขียนในสมัยไม่รู้ความเท่าไหร่]

วันนี้ผมมาแนะนำโปรแกรม FengOffice ที่ดีที่สุดสำหรับผม ถามว่าผมเอาเกณฑ์อะไรมาวัด ผมสามารถใช้เป็นได้ใน 5 นาทีไงครับ ผมลองมาหลายตัว ตัวนี้เปนตัวเดียวที่ผมคลำง่ายสุดใน 5 นาทีหรืออาจจะเพราะผมคลำตัวอื่นๆมาก่อนก็เป็นได้ ทำให้ผมสารถใช้เป็นอย่างรวดเร็ว โดยตัวโปรแกรมนี้เป็น Web Base คือต้องทำงานผ่านเว็บกล่าวคือหากคุณจะใช้ fengoffice คุณจำเป็นต้องมี Web Server, MySQL เป็นอย่างน้อย และที่สำคัญที่สุดขาดไม่ได้คือพวก Web Browser พวก Chrome หรือ Firefox ข้อดีของการเป็น Web base ก็คือคุณสามารถหา server มาตั้งแล้วเข้าถึงข้อมูลจากที่ไหนก็ได้

เมื่อลงเสร็จแล้วครั้งแรกที่เข้ามันจะให้คุณตั้ง username password ของ admin นะครับ ถ้าหากผ่านหน้านั้นมาก็สามารถ login ได้แล้วครับ

เมื่อ login ได้จะเจอหน้าจอติดต่อผู้ใช้ง่าย
ภาพ Interface ของ FengOfficeจะเห็นว่าจะแบ่งเป็น block มุมบนตรงส่วนของ Workspace จะเป็นส่วนของ Project งานที่เรามี ซึ่งเพิ่มได้โดยใช้ปุ่ม Add ข้างๆช่อง search ด้านล่าง Workspace มีส่วน People คือผู้ใช้ต่างๆ แต่พอดีผมใช้คนเดียวเลยไม่ได้ทดสอบส่วนนี้ ด้านขวาจะมีรายละเอียดคร่าวๆของ Project ของเรา จริงๆแล้วผมใช่แค่ Task ดังนั้นตัวอื่นผมไม่สามารถทราบได้ 55

ภาพ Interface ของ FengOffice ในหน้า Task

จากภาพจะเห็นว่าหน้า task จะมีรายละเอียดต่างๆของงานใน Project นั้นอยู่ โดยเราสามารถเพิ่มงานใน Project ได้ 2 แบบ

  • MileStone ผมแนะนำให้อันนี้เป็นงานใหญ่ๆที่มีงานย่อยๆอยู่ด้านใน
  • Task อันนี้ผมแนะนำให้ควรเป็นงานย่อยๆที่อยู่ใน MileStone หาก Task อยู่ใน MileStone เมื่อกด Complete เพื่อจบ Task (เอาเมาส์เลื่อนไปหรือคลิกที่ task จะมีปุ่มขึ้นมา) แถบแสดงสถานะของ MileStone จะขยับอัตโนมัติ แต่ถ้าเป็น Subtask หรือ task จะต้องกดเข้าไปใน task เพื่อ edit percent เอง แต่ถ้าหากตั้ง Estimated Time ไว้มันจะนับ Percent ตามเวลาที่เราทำ task นั้นให้

จะ เห็นได้ว่าผมมี MileStone 1 อัน และมี task ย่อยในนั้น 2 อัน อันนึงผมสั่งให้ตัวผมทำ อีกอันสั่งให้คนอื่นทำ(Company ที่มันบังคับให้สร้างตอนแรก)  โดย task ที่เสร็จแล้วจะมีขีดค่าขึ้น

ก็จบ review คร่าวๆประมาณนี้ ลองๆไปมั่วกันเองดูนะครับ น่าใช้มาก