Senario:
คุณมีไฟล์ที่มีสตริง (ค่าเฉลี่ยประโยค) ในแต่ละบรรทัด เพื่อประโยชน์ในการโต้แย้งสมมติว่าไฟล์นี้มีขนาด 1Mb (หลายพันบรรทัด)
คุณมีสคริปต์ที่อ่านไฟล์เปลี่ยนแปลงสตริงบางส่วนภายในเอกสาร (ไม่เพียง แต่ต่อท้าย แต่ยังลบและแก้ไขบางบรรทัด) แล้วเขียนทับข้อมูลทั้งหมดด้วยข้อมูลใหม่
คำถาม:
'เซิร์ฟเวอร์' PHP, OS หรือ httpd ฯลฯ มีระบบในสถานที่ที่จะหยุดปัญหาเช่นนี้ (อ่าน / เขียนครึ่งทางผ่านการเขียน) หรือไม่?
ถ้าเป็นเช่นนั้นโปรดอธิบายวิธีการทำงานและให้ตัวอย่างหรือลิงก์ไปยังเอกสารที่เกี่ยวข้อง
ถ้าไม่มีสิ่งที่ฉันสามารถเปิดใช้งานหรือตั้งค่าเช่นการล็อคไฟล์จนกว่าการเขียนจะเสร็จสมบูรณ์และทำให้การอ่านและ / หรือการเขียนอื่น ๆ ทั้งหมดล้มเหลวจนกว่าสคริปต์ก่อนหน้าจะเขียนเสร็จแล้วหรือไม่
ข้อสมมติฐานและข้อมูลอื่น ๆ ของฉัน:
เซิร์ฟเวอร์ที่สงสัยกำลังเรียกใช้ PHP และ Apache หรือ Lighttpd
หากสคริปต์ถูกเรียกใช้โดยผู้ใช้รายหนึ่งและอยู่กึ่งกลางผ่านการเขียนไปยังไฟล์และผู้ใช้รายอื่นอ่านไฟล์ในช่วงเวลาที่แน่นอน ผู้ใช้ที่อ่านมันจะไม่ได้รับเอกสารเต็มเนื่องจากยังไม่ได้เขียน (หากสมมติฐานนี้ผิดโปรดแก้ไขฉัน)
ฉันกังวลเฉพาะการเขียน PHP และการอ่านไฟล์ข้อความและโดยเฉพาะอย่างยิ่งฟังก์ชั่น "fopen" / "fwrite" และส่วนใหญ่ "file_put_contents" ฉันได้ดูเอกสาร "file_put_contents" แล้ว แต่ไม่พบระดับรายละเอียดหรือคำอธิบายที่ดีว่าแฟล็ก "LOCK_EX" นั้นเป็นเช่นไร
สถานการณ์เป็นตัวอย่างของสถานการณ์กรณีที่เลวร้ายที่สุดที่ฉันจะถือว่าปัญหาเหล่านี้มีแนวโน้มที่จะเกิดขึ้นเนื่องจากไฟล์มีขนาดใหญ่และวิธีการแก้ไขข้อมูล ฉันต้องการที่จะเรียนรู้เพิ่มเติมเกี่ยวกับปัญหาเหล ด้วย PHP และดูเหมือนจะไม่ถูกมองในสถานที่ที่เหมาะสม / เอกสารและใช่ฉันเข้าใจ PHP ไม่ใช่ภาษาที่สมบูรณ์แบบสำหรับการทำงานกับไฟล์ด้วยวิธีนี้
file_put_contents()
เป็นเพียงเสื้อคลุมสำหรับการfopen()/fwrite()
เต้นไม่เหมือนกันเช่นถ้าคุณต้องการโทรLOCKEX
flock($handle, LOCKEX)