我想在用户提交表单后30分钟内调用一个函数。我正在使用javascript setTimeOut()函数,但清除页面刷新或浏览器关闭时的计时器。无论浏览器是关闭还是刷新,我都想在30分钟后精确调用该函数。&我也想显示剩余时间到30分钟以及。运行预定作业
我看着Cron作业,但我的理解是,PHP不能直接调用cron作业。
谁能告诉我这将是做到这一点的最好办法?
我想在用户提交表单后30分钟内调用一个函数。我正在使用javascript setTimeOut()函数,但清除页面刷新或浏览器关闭时的计时器。无论浏览器是关闭还是刷新,我都想在30分钟后精确调用该函数。&我也想显示剩余时间到30分钟以及。运行预定作业
我看着Cron作业,但我的理解是,PHP不能直接调用cron作业。
谁能告诉我这将是做到这一点的最好办法?
at
command和相关的atd
守护进程可以安排将来在任意时间执行的事情。你可能不得不写一个专门的PHP脚本传递给at
。您可以将额外的参数传递给它以便知道哪个用户提交了表单等。当然,这些代码将在服务器上执行。 PHP代码会将结果存储在数据库(或类似的全局数据存储)中。setTimeout()
呼叫仍然可以使用,以保证浏览器被重定向到一个页面(或通过AJAX等加载它)来查看在适当的时间的结果(假定用户是网站上的事件发生时)。继续根据会话中的时间,将每页上的setTimeout()
加载到正确的时间。请记住,步骤#1中的PHP代码需要时间来执行,因此您可能需要向#3添加一个小延迟以确保结果可用,以及相应的错误由于其他原因,处理结果不可用。
+1我会用这个方法去 – 2011-02-06 05:37:06
我投了@wuputah方法,并同意它是最好的,但如果你无法访问他的第一步(共享主机等),那么你可以设置时间戳在数据库中,并设置一个cron作业每隔1分钟运行一次,检查数据库是否存在没有“已处理”标记的“过期”时间...然后对该数据执行过程(并将数据库条目标记为“已处理”,以便它不会在下一个周期)。
+---------------------------------------------+
| RECORD ID | TIMESTAMP | PROCESSED |
+---------------------------------------------+
| 1 | 2010-02-06 15:27:10 | yes |
| 2 | 2010-02-06 15:47:10 | no |
| 3 | 2010-02-06 15:49:10 | no |
+---------------------------------------------+
这取决于具体情况。它是否需要在浏览器或服务器上运行?它需要多少准确度,±1分钟是否可以接受? – deceze 2011-02-06 05:23:14
±1是可以接受的。我想保持它在后端运行,也许在服务器上运行。我的要求是,一旦提交表格,计划中不应该有任何停顿。它运行的地方(浏览器或服务器)只要继续运行就没关系 – ptamzz 2011-02-06 05:39:14