2016-04-01 8 views
0

Ich habe Probleme zu verstehen, genau wie eine flock() Ed-Datei gesperrt ist. Ich Sperren eine einfache Textdatei wie folgt:Warum kann PHP immer noch in dieser gesperrten Datei lesen/schreiben?

// 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"; 
} 

Dann aus einem anderen Skript, überprüfe ich, ob die Datei is_writable()/is_readable():

// 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"; 

Aber wenn ich sie laufen, sie beide denken, sie haben Zugang:

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

Die docs here und here ziemlich dürftig sind auf Details, was bin ich dabei? Benutze ich Flock falsch? Überprüfen die Funktionen is_readable() und is_writable() etwas, das nichts mit der Lese-/Schreibbarkeit zu tun hat?

+0

Nur neugierig, haben Sie versucht, tatsächlich in das Skript test.php zu schreiben? –

+0

Sind lesbare/schreibbare IIRC-reine Berechtigungsprüfungen, sie prüfen nicht den Sperrstatus einer Datei? –

+0

@Tom Ich habe nicht versucht, tatsächlich mit der Datei zu interagieren, ich nahm an, es würde nicht funktionieren, da die Datei _should_ gesperrt werden sollte. – Will

Antwort

0

Die docs sind viele Details fehlen, aber sie sind ein wichtiges Detail auf is_readable() oder is_writable():

Hinweis: Die Ergebnisse dieser Funktion werden gecached. Weitere Informationen finden Sie unter clearstatcache() .

Sie müssen clearstatcache() gegen diese Datei oder das Verzeichnis laufen, bevor is_readable() Aufruf up-to-date Informationen zu sehen.

+0

Hinzugefügt, das gleiche Problem. Es scheint ein Genehmigungsproblem zu sein, wie Mark oben vermutet hat. – Will