2016-04-01 17 views
0

Tam olarak bir flock() ed dosyasının kilitli olduğunu anlamakta sorun yaşıyorum. Öyle gibi basit bir metin dosyası kilitleme ediyorum: Onlara çalıştırdığınızdaPHP neden bu kilitli dosyaya okuma/yazma yapabilir?

// test.php 

$filename = "data.txt"; 

if (is_readable($filename)) echo "File is readable\n"; 
else echo "File is not readable\n"; 

if (is_writable($filename)) echo "File is writable\n"; 
else echo "File is not writable\n"; 

Fakat, ikisi de onlar var: Dosya is_writable()/is_readable() eğer

// file_lock.php 

$filename = "data.txt"; 
$delay = 5; 

$lock = fopen($filename, "w"); 
if ($lock === FALSE || !flock($lock, LOCK_EX | LOCK_NB, $block) || $block) { 
    echo "ERROR: Can not open or lock " . $filename . "\n"; 
    sleep($delay); 
} 
else { 
    echo "SUCCESS: " . $filename . " locked.\n"; 
    sleep($delay); 
    flock($lock, LOCK_UN); 
    echo $filename . " unlocked\n"; 
} 

Sonra, başka bir komut dosyasından diye kontrol erişimi:

$ php file_lock.php & php test.php 
SUCCESS: data.txt locked. 
File is readable 
File is writable 
data.txt unlocked 

docs here ve here ayrıntıları oldukça yetersizdir, ne eksik? Akın yanlış kullanıyor muyum? is_readable() ve is_writable() işlevleri, okuma/yazılabilirliği belirlemek için ilgisiz bir şey olup olmadığını kontrol ediyor mu?

+0

Sadece merak ediyorum, gerçekten test.php dosyasındaki dosyaya yazmayı denediniz mi? –

+0

Okunabilir/yazılabilir IIRC tamamen izinli çekler, bir dosyanın kilit durumunu kontrol etmiyorlar mı? –

+0

@Tom Dosyayla gerçekten etkileşimde bulunmayı denemedim, _should_ kilitli dosya olarak çalışmayacağını düşünmüştüm. – Will

cevap

0

docs detaydan eksik, ancak is_readable() veya is_writable() üzerinde önemli bir ayrıntıyı kapsar yapın:

Not: Bu fonksiyonun sonuç önbelleğe alınır. Daha fazla ayrıntı için bkz. clearstatcache() .

En fazla güncel bilgileri görmek için is_readable() çağırmadan önce bu dosya veya dizin karşı clearstatcache() çalıştırmak gerekir.

+0

Bu, aynı sorun eklendi. Mark'ın yukarıda tahmin ettiği gibi bir izin problemi gibi görünüyor. – Will