Slide 12
Slide 12 text
2020/9/25 Connehito Marché Online
多重起動防止処理を共通クラスに実装
className = (new ReflectionClass($this))-
>getShortName();
$this->lockFileName = TMP . $this->className .
'.lock';
// ロックファイルのプロセスIDをチェック
if ($this->checkLockFile()) {
$this->isLockfileExit = true;
exit;
}
// ロックファイルの作成
file_put_contents($this->lockFileName, getmypid());
}
public function __destruct()
{
// プロセスがすでに存在して強制終了でなければ
if (!$this->isLockfileExit) {
// ロックファイルの削除
unlink($this->lockFileName);
}
}
/*
* ロックファイルのプロセスIDをチェック
*/
protected function checkLockFile(): bool
{
// ロックファイルの存在確認
if (!file_exists($this->lockFileName)) {
return false;
}
// ファイル内に記載されているプロセスIDを取得
$pid = file_get_contents($this->lockFileName);
$pid = str_replace(PHP_EOL, '', $pid);
if (!is_numeric($pid)) {
return false;
}
//取得したプロセスIDが動いていないかチェック
$output = [];
$cmd = "ps h " . $pid;
exec($cmd, $output);
if (isset($output[0])) {
echo "Process already exist.¥n";
echo $output[0] . "¥n";
return true;
}
return false;
}
}