如何阻止PHP sleep()影响我的整个PHP代码?

2 php sleep delay

所以,在我的街机上,howlingdoggames.com.我有一个积分系统,每次你访问一个有游戏的页面时都给你一个点,现在,为了减少对此的滥用,我想做出某种延迟,所以它只在45秒后获奖.这是我尝试过的.

...

     if ($_SESSION['lastgame'] != $gameid);{
      sleep(45);
$points = $points + $game_points;
      $_SESSION['lastgame'] = $gameid;
      }

   ...
Run Code Online (Sandbox Code Playgroud)

不过,这似乎只是阻止我的整个网站45秒,因为这是在index.php文件,与其他代码,以我的网站很多.

无论如何我可以隔离那段代码,所以它只能实现这个功能

$points = $points + $game_points;
Run Code Online (Sandbox Code Playgroud)

等45秒?

cle*_*tus 7

PHP中(大多数情况下)没有多线程.您可以使用Unix系统上的分叉进程来执行此操作,但这是无关紧要的,因为多线程并不是您所追求的.你只想要这样简单的逻辑:

$now = time();
session_start();
$last = $_SESSION['lastvisit'];
if (!isset($last) || $now - $last > 45) {
  $points = $_SESSION['points'];
  if (!isset($points)) {
    $points = 0;
  }
  $_SESSION['points'] = $points + 10;
  $_SESSION['lastvisit'] = $now;
}
Run Code Online (Sandbox Code Playgroud)

如果你最后一次给出点数之间的增量大于45秒,基本上只给出分数.


bro*_*man 5

它是会话阻止你的脚本.不是"PHP中没有多线程".sleep()之前的session_write_close()将解决阻塞整个脚本的问题.但可能不适合你的问题.

所以你必须使用js和AJAX的settimeout来保存奖金.

来自php.net的sleep()评论:http://www.php.net/manual/en/function.sleep.php#96592

请注意,sleep()会延迟当前会话的执行,而不仅仅是脚本.请考虑以下示例,其中两台计算机从浏览器调用相同的脚本,除了休眠之外不执行任何操作.