Dosya Sistemi İşlevleri
PHP Manual

flock

(PHP 4, PHP 5)

flockTaşınabilir tavsiye niteliğinde dosya kilitleme

Açıklama

bool flock ( resource $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.

Değiştirgeler

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:

  • Paylaşımlı bir kilit (okuyucu) edinmek için LOCK_SH.
  • Ayrıcalıklı bir kilit (yazıcı) edinmek için LOCK_EX.
  • Bir kilidi (paylaşımlı veya ayrıcalıklı) serbest bırakmak için 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ı).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Sürüm Bilgisi

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.

Örnekler

Örnek 1 - flock() örneği

<?php

$dt 
fopen("/tmp/lock.txt""w");

if (
flock($dtLOCK_EX)) { // ayrıcalıklı bir kilit oluşturalım
    
ftruncate($fp0);  // dosyayı kırp
    
fwrite($dt"Buraya bir şeyler yazalım\n");
    
flock($dtLOCK_UN); // kilidi serbest bırakalım
} else {
    echo 
"Kilit edinilemedi!";
}

fclose($dt);

?>

Notlar

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.

Uyarı

Ardıl kodda dt değiştirgesine başka bir değer atanması kilidin serbest kalmasına sebep olur.

Uyarı

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).


Dosya Sistemi İşlevleri
PHP Manual