0

它困扰了我一天,我真的找不到,我有一个基本的登录/注册页面,注册时,时间戳存储在 mysql 数据库中(表计时器,列冷却):

$settime = mysql_query("INSERT INTO `timer` (`cooldown`) VALUES(0)") or die(mysql_error());

我现在想做的是(我正在创建一个浏览器 mmorpg),当我执行特定的 POST 请求时,我希望我的数据库中的计时器关闭。这个计时器应该是 1 分钟,并且也显示给用户,比如:<?php echo $timer['cooldown']; ?>每当计时器 = 0 时,我可以再次执行特定功能,计时器将再次设置为 60 秒。

对不起,缺乏知识,但我无法在任何地方找到如何做到这一点。

4

1 回答 1

1

您在此处尝试执行的操作(后台工作)违反了 PHP 无共享环境中请求-响应循环的 Web 开发原则。但是有几种方法可以打破刚性循环:

  • 如果您只需要在 1 分钟后进行一些数据库更新,您可以使用 MySQL 事件:http ://dev.mysql.com/doc/refman/5.1/en/events.html
  • 如果您要调用的函数没有运行太久,您可以检查每个用户请求,如果timer表中存在超过 1 分钟的条目。
  • 创建一个由 cron 作业每分钟调用的 PHP 脚本。它检查表中是否有未处理的项目timer并对其进行处理。
  • 创建一个PHP 守护程序脚本,每分钟唤醒一次以进行检查。
  • 如果您需要在 1 分钟后更改用户页面上的某些内容,使用 JavaScript 超时和 AJAX 或 websockets 执行 PHP 脚本调用客户端是更好的选择。

为了向用户显示倒计时,您必须使用 JavaScript。如果您正在使用服务器端计时器,则可以将其仅用于显示目的,完成时隐藏倒计时。要解决“用户在超时完成之前打开新页面”的问题,请将剩余秒数的数据放在data您的 JavaScript 代码可以读取的 HTML 属性中。

于 2013-09-19T14:40:24.613 回答