推 buganini:開.lock temp file? 10/09 15:52
→ guardlan:開.lock的方式一開始有做,但是檔案仍然會寫壞掉... 10/09 16:09
→ guardlan: if($FH = fopen($file_path, 'w+')){ 10/09 16:10
→ guardlan: while((strtotime('now') - $starttime <= $wait 10/09 16:10
→ guardlan: if(!file_exists($file_path.'.lock')){ 10/09 16:10
→ guardlan: $canwrite = TRUE; 10/09 16:11
→ guardlan: break; 10/09 16:11
→ guardlan: } 10/09 16:11
→ guardlan: usleep(round(rand(0, 300)*1000)); 10/09 16:11
→ guardlan: } 10/09 16:11
→ guardlan: touch($file_path.'.lock'); 10/09 16:11
→ guardlan: fwrite($FH, $file_content); 10/09 16:12
→ guardlan: unlink($file_path.'.lock'); 10/09 16:12
→ guardlan: fclose($FH); 10/09 16:12
→ guardlan: } 10/09 16:12
→ guardlan:不知道這樣的寫法是不是有問題,程式上線後檔案依然寫壞. 10/09 16:13
→ guardlan:少copy到一行...touch的前面有 if($canwrite){ 10/09 16:15
推 chocho1981:為何不用大E修改文章阿= =? 這樣推不會累嗎 10/09 17:17
推 arrack:$wait 時間如何確保夠長? 10/09 18:38
→ arrack:而且那行 似乎有錯誤 10/09 18:38
推 buganini:對了NFS應該不能確保即時性吧.. 10/10 00:57
→ buganini:lock本身也是個有點歷史的問題 10/10 00:57
推 world294:/ect/init.d/nfslock start 這不行嗎? 10/10 14:42
→ guardlan:$wait 時間目前是先暫時給個2秒...因為那個檔案很小... 10/12 10:15
→ guardlan:最討厭的是偏偏不能使用DB來存資料...非得用檔案... 10/12 10:16
→ guardlan:如果兩秒後 $canwrite還是false的話則跳過不處理 10/12 10:19
→ guardlan:我好像沒有大E可以用...按shift + e沒反應... 10/12 10:29
→ guardlan:看來只能跟上頭反映這機制沒辦法做了XD 10/12 10:36
推 arrack:如果有DB,用DB來存LOCK資訊也不錯 10/12 12:12
→ guardlan:用DB的話就不會有這個問題...因為某些原因不能使用DB... 10/13 10:02