a.php
$file3=fopen('a.txt','r+');if(flock($file3,LOCK_EX+LOCK_NB)) { fwrite($file3,$_GET['s']) ; sleep(5); flock($file3,LOCK_UN);} else{ echo "檔案鎖定,不可寫入內容!";}
b.php
$file2=fopen('a.txt','r+');fwrite($file2,$_GET['s']) ;echo fread($file2,filesize('a.txt'));fclose($file2);
先執行a.php時利用5秒間隔執行b.php
按理說由於a.php已經鎖定,所以b.php,
無法寫入,老師的視屏也是如此進行的
但是,我卻不能和老師的一樣運行,
結果依然是b.php寫入的內容,a.php,並沒有
鎖定成功。
在下發現一個問題:就是我不能像視頻裡的老師一樣利用間隔執行另一個指令碼;
實際情況是:執行a.php完全結束後,才會在執行b.php。(前提是先重新整理a.php,再重新整理b.php)
我不清楚為什麼會這樣,請大家指教!
回複內容:
a.php
$file3=fopen('a.txt','r+');if(flock($file3,LOCK_EX+LOCK_NB)) { fwrite($file3,$_GET['s']) ; sleep(5); flock($file3,LOCK_UN);} else{ echo "檔案鎖定,不可寫入內容!";}
b.php
$file2=fopen('a.txt','r+');fwrite($file2,$_GET['s']) ;echo fread($file2,filesize('a.txt'));fclose($file2);
先執行a.php時利用5秒間隔執行b.php
按理說由於a.php已經鎖定,所以b.php,
無法寫入,老師的視屏也是如此進行的
但是,我卻不能和老師的一樣運行,
結果依然是b.php寫入的內容,a.php,並沒有
鎖定成功。
在下發現一個問題:就是我不能像視頻裡的老師一樣利用間隔執行另一個指令碼;
實際情況是:執行a.php完全結束後,才會在執行b.php。(前提是先重新整理a.php,再重新整理b.php)
我不清楚為什麼會這樣,請大家指教!
PHP supports a portable way of locking complete files in an advisory
way (which means all accessing programs have to use the same way of
locking or it will not work). By default, this function will block
until the requested lock is acquired; this may be controlled with the
LOCK_NB option documented below.
advisory lock - 你需要在 a.php 和 b.php 都調用flock()