Почему PHP все еще может читать / писать в этот заблокированный файл?

У меня возникают проблемы с пониманием, как именно flock()Ed файл есть. Я блокирую простой текстовый файл примерно так:

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

Затем из другого скрипта я проверяю, есть ли файл 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";

Но когда я запускаю их, они оба думают, что имеют доступ:

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

Документы Вот а также Вот довольно мало деталей, что я пропускаю? Я неправильно использую стадо? Выполнять функции is_readable() а также is_writable() проверить что-то не связанное, чтобы определить возможность чтения / записи?

1

Решение

В документах не хватает многих деталей, но они содержат одну важную деталь is_readable() или же is_writable():

Замечания: Результаты этой функции кэшируются. Увидеть clearstatcache ()
Больше подробностей.

Вам нужно будет бежать clearstatcache() против этого файла или каталога перед вызовом is_readable() видеть актуальную информацию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]