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?
Nur neugierig, haben Sie versucht, tatsächlich in das Skript test.php zu schreiben? –
Sind lesbare/schreibbare IIRC-reine Berechtigungsprüfungen, sie prüfen nicht den Sperrstatus einer Datei? –
@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