(PHP 4, PHP 5)
flock — Taşınabilir tavsiye niteliğinde dosya kilitleme
flock() işlevi, sanal olarak her platformda (çoğu Unix türevi yanında Windows da dahil) kullanılabilen basit bir okuma/yazma modeli oluşturmanızı mümkün kılar.
Kilit, fclose() işlevi ile serbest bırakılır (ayrıca, betik sonlandığında özdevinimli olarak çağrılır).
PHP, tavsiye niteliğinde dosyaların tamamını kilitlemenin taşınabilir bir türünü destekler (yani, dosyalara erişen tüm programların dosyaları kilitlerken aynı yöntemi kullanmaları zorunludur, aksi takdirde kullandıkları yöntem çalışmayacaktır). Öntanımlı olarak, bu işlev istenen kilit alınıncaya kadar bekler. Bu durum aşağıda açıklanan LOCK_NB seçeneği ile (Windows dışındaki platformlarda) değiştirilebilir.
Dosya tanıtıcısı geçerli olmalı ve fopen() veya fsockopen() tarafından başarıyla açılmış bir dosya için döndürülmüş olmalıdır (ve henüz fclose() tarafından kapatılmamış olmalıdır).
işlem şunlardan biri olabilir:
Kilitleme sırasında işlevinin engelleme yapmasını istemiyorsanız LOCK_NB eklemek de mümkündür (Windows'ta desteklenmez).
Kilidin engellemesi için isteğe bağlı üçüncü değiştirgeye TRUE atanır (EWOULDBLOCK errno kuralı).
Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.
Sürüm: | Açıklama |
---|---|
4.0.1 | LOCK_XXX sabitleri eklendi. Daha önce LOCK_SH için 1, LOCK_EX için 2, LOCK_UN için 3 ve LOCK_NB için 4 belirtilmesi zorunluydu. |
Örnek 1 - flock() örneği
<?php
$dt = fopen("/tmp/lock.txt", "w");
if (flock($dt, LOCK_EX)) { // ayrıcalıklı bir kilit oluşturalım
ftruncate($fp, 0); // dosyayı kırp
fwrite($dt, "Buraya bir şeyler yazalım\n");
flock($dt, LOCK_UN); // kilidi serbest bırakalım
} else {
echo "Kilit edinilemedi!";
}
fclose($dt);
?>
Bilginize:
flock() işlevi Windows altında zorunlu olarak kilitler.
Bilginize:
flock() işlevi bir dosya tanıtıcısı gerektirdiğinden bir dosyayı yazmak amacıyla açarken (fopen() işlevinde "w" veya "w+" değiştirgeleri ile) içeriğini silebilmek için dosyaya başkalarının erişimini engellemeniz, yani özel bir kilit dosyası kullanmanız gerekir.
Ardıl kodda dt değiştirgesine başka bir değer atanması kilidin serbest kalmasına sebep olur.
flock() işlevi NFS ve diğer bir çok ağ dosya sistemi üzerinde çalışmaz. Ayrıntılı bilgi için işletim sisteminizin belgelerine bakınız.
Bazı işletim sistemlerinde flock() işlevi süreç seviyesinde gerçeklenmiştir. ISAPI gibi çok evreli bir API kullanıldığında, dosyaları aynı sunucu örneğinin paralel evrelerinde çalışan diğer PHP betiklerine karşı flock() üzerinden korumak mümkün olmayabilir!
flock() işlevi, FAT ve türevleri gibi artık antika olmuş dosya sistemlerinde desteklenmez ve bu ortamlarda daima FALSE döndürür (özellikle Windows 98 için).