(PHP 4, PHP 5, PHP 7)
flock — Taşınabilir tavsiye niteliğinde dosya kilitleme
$dt
, int $işlem
[, int &$engellensin
] )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.
dt
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
işlem
şunlardan biri olabilir:
LOCK_SH
.
LOCK_EX
.
LOCK_UN
.
Kilitleme sırasında işlevinin engelleme yapmasını istemiyorsanız
LOCK_NB
eklemek de mümkündür (Windows'ta
desteklenmez).
engellesin
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).