flock()
edファイルがどのようにロックされているかを正確に理解できません。私はそうのような単純なテキストファイルをロックしています:PHPはまだこのロックされたファイルを読み書きできますか?
// 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
ドキュメントhereとhereは、細部にかなり乏しい私が何をしないのですか?フロックを誤って使用していますか? is_readable()
とis_writable()
の機能は、読み取り/書き込みの可否を判断するために関係のないものをチェックしていますか?
本当に不思議なことに、実際にtest.phpスクリプトのファイルに書き込もうとしましたか? –
IIRCは読み取り/書き込み可能ですが、ファイルのロック状態をチェックしません。 –
@Tom実際にファイルと対話しようとはしませんでしたが、ロックされているとファイルが動作しないと思っていました。 – Will