以下の内容はhttps://iww.hateblo.jp/entry/20151216/flockより取得しました。


多重起動防止にファイルロックを使う

ファイルロックをする際、ファイルロックを関数にするとロックが効かなくなるので注意する

<?php
function lock(){
    static $fp;
    $fp = fopen("/tmp/a.lock", "c") or die("");
    flock($fp, LOCK_EX|LOCK_NB) or die("多重起動を検知したよ");
}

ファイルポインタを静的変数にするのがポイント。意図的なリーク。
動的なままだと、関数を抜けるとスコープが切れて、デストラクタが走って、ファイルがクローズされ、ロックも解除されてしまう。


この関数は同一プロセス内では何回読んでも多重起動にはならない。
(もう一度呼ばれたときはファイルポインタの上書きで前のリソースが解放されるため)

ファイルのリソースハンドルを閉じたときにロックを自動的に解放する機能が削除されました。 ロックの解放は、常に手動で行わなければなりません。

http://php.net/manual/ja/function.flock.php

と書いてあるけど、リソースが無くなった時にはさすがに自動で解放されるっぽい?


読み返してみるとかなり酷いコード書いてるけど、気にしないようにする




以上の内容はhttps://iww.hateblo.jp/entry/20151216/flockより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14