所以,在我的街机上,howlingdoggames.com。我有一个积分系统,每次你访问一个有游戏的页面时都会给你一个积分。为了减少滥用,我想进行某种延迟,因此仅在 45 秒后才授予。这是我尝试过的:
if ($_SESSION['lastgame'] != $gameid) {
sleep(45);
$points = $points + $game_points;
$_SESSION['lastgame'] = $gameid;
}
但这似乎使我的整个网站停止了 45 秒,因为这是在 index.php
中。 ,以及我网站的许多其他代码。无论如何我可以隔离那段代码,所以它只会声明
$points = $points + $game_points;
等待 45 秒?
最佳答案
PHP 中(大部分)没有多线程。您可以通过在 Unix 系统上 fork 进程来做到这一点,但这无关紧要,因为多线程并不是您真正想要的。你只想要这样的简单逻辑:
$now = time();
session_start();
$last = $_SESSION['lastvisit'];
if (!isset($last) || $now - $last > 45) {
$points = $_SESSION['points'] ?? 0;
$_SESSION['points'] = $points + 10;
$_SESSION['lastvisit'] = $now;
}
基本上只有在您上次给分之间的增量大于 45 秒时才给分。
关于php - 如何阻止影响我整个 PHP 代码的 PHP sleep()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1617412/