Eşzamanlı Dosya Erişim

5 Cevap

Kullanımı:

fopen
fwrite
fclose

Iki kullanıcı aynı anda aynı dosyayı açmaya çalışırsanız ne olur?

5 Cevap

Küçük ölçekli dosya işlemleri aynı anda iki yazma oldukça nadirdir o kadar hızlıdır. Ne olursa olsun, flock dosyayı kilitlemek için kullanabilirsiniz:

$fp = fopen('file.log', 'a+');
flock($fp, LOCK_EX);
fwrite($fp, 'my data');
flock($fp, LOCK_UN);
fclose($fp);

Not fclose otomatik olarak dosya kilidini, ama ben kod yapar bulmak biraz daha kullanıcı dostu Lütfen bu şeyleri koymak için

Önemli olan:

  1. Yazdıkları ne olur
  2. (A) okursa ne (b) sonra, (b) (a) yazıyor sonra yazar okur, ne olur? Bu hesaplama artık son durumu türetilmiştir çünkü (a) 's yazma geçersiz mi?

Klasik örnek birçok metinlerde kullanılan Cash machine/bank balance bir örnektir.

shared writable state her türlü concurrent access control böyle bir mutex gibi çeşit gerektirir, ama bu tür race conditions {[gibi potansiyel sorunlar ton vardır (4)]} .

Birçok işletim sistemi ancak izin File locking of some description, which means the other process waits for the lock to be released. See PHP's flock() for locking a file.

Ayrıca yaklaşım "/ birleştirme taahhüt, ödeme, değişim" bir kullanabilirsiniz.

Lütfen nedenlerle bağlı olarak, bu tür MySQL veya SQLite bu ağır okumak veya bir durumu paylaşmak için faster, more robust yollar sağlayacak gibi bir veritabanı düşünebilirsiniz cache-az.

Sayısız sorunlar, tuzaklar ve paylaşım devlet yolları büyüktür. Tüm Vikipedi kullanım için özür dilemek istiyorum.

Use file_put_contents() instead with the FILE_APPEND veya LOCK_EX bayraklar.

Bu bayrakların herhangi bir yazı için dosyayı kilitleyin.

Eğer dosyayı [akın] kilitlemek sürece Evet, aynı anda iki dosya açabilirsiniz. Ona yazarken henüz bir dosyayı akın için en iyi zaman olacak, ya da bunu seçerseniz sadece tek bir kullanıcı herhangi bir noktada bir dosyayı görüntülemek için izin verir.

Her zaman olur. Ancak sorunuzun cevabı hem tam olarak ne istediğinizi / açılmış dosya ile yapmak istediğiniz bağlıdır. Olası eylemler / çözümler tamamen bu ihtiyaca bağlıdır.