我有一個PHP維護腳本,用於更新和修復數據庫。理論上,同時運行兩個腳本應該不成問題,但我希望通過在PHP中將變量鎖定在一個變量中來保證安全。當然,問題是我不能將它存儲在$_SESSION
變量中,因爲會話僅適用於一個用戶。如何在PHP中創建非文件鎖定?
有沒有什麼辦法可以將這個鎖存儲在變量中?如果服務器在腳本中間死亡,我寧願不創建和刪除文件。
我有一個PHP維護腳本,用於更新和修復數據庫。理論上,同時運行兩個腳本應該不成問題,但我希望通過在PHP中將變量鎖定在一個變量中來保證安全。當然,問題是我不能將它存儲在$_SESSION
變量中,因爲會話僅適用於一個用戶。如何在PHP中創建非文件鎖定?
有沒有什麼辦法可以將這個鎖存儲在變量中?如果服務器在腳本中間死亡,我寧願不創建和刪除文件。
MySQL具有GET_LOCK()的功能。
由於您正在使用數據庫,因此您可以在腳本運行時使用lock the tables。這將確保獨有的數據庫訪問。
有沒有什麼辦法可以將這個鎖存儲在一個變量中?
一個變量是當前的php實例 - 所以它是一個更糟糕的解決方案,而不是將它保留在會話中。
如果服務器死在腳本中間,我寧願不創建和刪除文件。
它仍然可能是最好的地方。如果修復腳本沒有完成,那麼您可能想介入並手動確保數據一致 - 在操作啓動併成功完成時,您還應該阻止對資源的所有其他訪問。
如果在命令提示符下運行它,那麼你可以搜索進程列表:
$cmd=$argv[0];
$pid=getmypid();
$find="ps -ef | grep $cmd | grep -v grep | grep -v $pid";
$others=`$find`;
但這仍然帶有先前嘗試失敗,並且數據被損壞的風險。
C.