<?php
var_dump(PHP_OS);
var_dump(PHP_VERSION);
function ulock(callable $cb)
{
$lockFile = 'limit.lock';
do {
$fp = fopen($lockFile, 'ab+');
if (!flock($fp, LOCK_EX | LOCK_NB)) {
var_dump('获取锁失败');
break;
}
$now = time();
$timestamp = (int)fgets($fp);
if ($timestamp >= $now) {
flock($fp, LOCK_UN);
break;
}
$cb($now);
ftruncate($fp, 0);
fwrite($fp, $now);
flock($fp, LOCK_UN);
} while (false);
fclose($fp);
}
for ($i = 0; $i < 20; $i++) {
ulock(function ($now) {
var_dump($now);
});
usleep(mt_rand(1, 3) * 1e5);
}