16/05/13 11:46:37.11 /XgzJMPY.net
>>41
いろいろ面白そうだったので、勝手に作ってみた。
function my_lock($lockfile, $timeout, $maxuser)
{
// ロック試行
$fp = fopen($lockfile, 'a');
if(flock($fp, LOCK_EX|LOCK_NB)) return $fp;
// 待ち人数を数える
exec('/usr/sbin/lsof -FC '.escapeshellcmd("\"$lockfile\"").' 2>/dev/null', $out, $ret);
if($ret == 0) {
if(count($out) > $maxuser) {
// 待ち人数過剰
fclose($fp);
return false;
}
}
// 時間制限付きロック試行
for($interval = 100, $remain = $timeout * 1000; $remain > 0; $remain-=$interval) {
if(flock($fp, LOCK_EX|LOCK_NB)) return $fp;
usleep($interval * 1000);
}
// タイムアウト
fclose($fp);
return false;
}