2016-04-01 9 views
0

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 

ドキュメントherehereは、細部にかなり乏しい私が何をしないのですか?フロックを誤って使用していますか? is_readable()is_writable()の機能は、読み取り/書き込みの可否を判断するために関係のないものをチェックしていますか?

+0

本当に不思議なことに、実際にtest.phpスクリプトのファイルに書き込もうとしましたか? –

+0

IIRCは読み取り/書き込み可能ですが、ファイルのロック状態をチェックしません。 –

+0

@Tom実際にファイルと対話しようとはしませんでしたが、ロックされているとファイルが動作しないと思っていました。 – Will

答えて

0

ドキュメントは、多くの詳細が欠けているが、それらはis_readable()またはis_writable()上の一つの重要な詳細が含ま行います

注:この機能の結果がキャッシュされます。詳細については、clearstatcache() を参照してください。

あなたは、最新の情報を確認するためにis_readable()を呼び出す前に、そのファイルまたはディレクトリに対してclearstatcache()を実行する必要があります。

+0

これも同じ問題を追加しました。 Markが上で推測したように、許可の問題があるようです。 – Will

関連する問題