Senario:
Anda memiliki file dengan string (nilai kalimat rata-rata) di setiap baris. Demi argumen, katakanlah file ini berukuran 1 MB (ribuan baris).
Anda memiliki skrip yang membaca file, mengubah beberapa string dalam dokumen (tidak hanya menambahkan tetapi juga menghapus dan memodifikasi beberapa baris) dan kemudian menimpa semua data dengan data baru.
Pertanyaan-pertanyaan:
Apakah 'server' PHP, OS atau httpd dll. Sudah memiliki sistem untuk menghentikan masalah seperti ini (membaca / menulis setengah jalan melalui penulisan)?
Jika ya, tolong jelaskan cara kerjanya dan berikan contoh atau tautan ke dokumentasi yang relevan.
Jika tidak, apakah ada hal-hal yang dapat saya aktifkan atau set-up, seperti mengunci file sampai penulisan selesai dan membuat semua bacaan lainnya dan / atau penulisan gagal sampai skrip sebelumnya selesai menulis?
Asumsi Saya dan Informasi Lainnya:
Server yang dimaksud menjalankan PHP dan Apache atau Lighttpd.
Jika skrip dipanggil oleh satu pengguna dan setengah jalan menulis ke file dan pengguna lain membaca file pada saat yang tepat. Pengguna yang membacanya tidak akan mendapatkan dokumen lengkap, karena belum ditulis. (Jika asumsi ini salah, mohon koreksi saya)
Saya hanya peduli dengan penulisan dan pembacaan PHP ke file teks, dan khususnya, fungsi "fopen" / "fwrite" dan terutama "file_put_contents". Saya telah melihat dokumentasi "file_put_contents" tetapi belum menemukan tingkat detail atau penjelasan yang baik tentang apa bendera atau "LOCK_EX" itu.
Skenario adalah contoh dari skenario terburuk di mana saya akan menganggap masalah ini lebih mungkin terjadi, karena ukuran file yang besar dan cara data diedit. Saya ingin mempelajari lebih lanjut tentang masalah ini dan tidak ingin atau memerlukan jawaban atau komentar seperti "gunakan mysql" atau "mengapa Anda melakukan itu" karena saya tidak melakukan itu, saya hanya ingin belajar tentang membaca / menulis file dengan PHP dan sepertinya tidak mencari di tempat yang tepat / dokumentasi dan ya saya mengerti PHP bukan bahasa yang sempurna untuk bekerja dengan file dengan cara ini.
file_put_contents()
hanyalah bungkus untuk fopen()/fwrite()
tarian, LOCKEX
melakukan hal yang sama seperti jika Anda akan menelepon flock($handle, LOCKEX)
.