防止双重执行函数

时间:2014-03-14 15:58:16

标签: php automation

我开发了一款在线游戏。它有一个名为automations.php的文件,它负责所有类型的自动化任务,如训练士兵,处理战斗等。我的问题有时会被执行两次:

class automation{
        function automation(){
            if(!file_exists('traning.txt')){
                file_put_contents('traning.txt' ,'');
                $this->train_soldiers();
            }
        }
        private function train_soldiers(){@unlink('traning.txt');}

    }

正如您所看到的,train_soldiers应该只执行一次,但是当有很多在线玩家时,功能会被执行两次(在两个不同的请求上)。我的问题是如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您需要将文件保留在那里以供将来请求使用:

class automation{
    function automation(){
        if(!file_exists('traning.txt')){
            $fp = fopen('traning.txt', 'r+');
            if (flock($fp, LOCK_EX, false)) {
                $this->train_soldiers();
                flock($fp, LOCK_UN);
            }
            fclose($fp);
        }
    }
    private function train_soldiers(){/** do all training, don't remove the file**/}
}

这样下一个请求就不会执行它。

更新1:添加了群组功能。如果这不起作用,请告知您的意思,它不起作用。