1

又见面了!我正在尝试编写一组脚本,这些脚本仅在自上次运行以来已超过 15 分钟时才会在页面上运行。基本上,一个自动化脚本每半小时更新一次我的数据库——显示该信息和更新会话变量的页面显然必须在打开数据库时查询数据库。

因此,为了最大限度地减少查询但也保持安全,我认为会话变量只有在自上次查看该页面后超过 15 分钟时才会从数据库中更新。我写了一些代码,我希望你们在我尝试实现它之前可以看看它?

if(!isset($_SESSION['time_next'])){

    $_SESSION['time_next'] = time() + (15 * 60);
                                     //15 minutes   
}
else if(time() >= $_SESSION['time_next']){

    //update all the session variables, etc...

    $_SESSION['time_next'] = time() + (15 * 60);    
}

你怎么看?这行得通吗?

4

2 回答 2

1

它会起作用,但你可以写得更短更简洁*。请注意,会话是受访问者限制的,因此当 10 人请求该页面时,您将获得 10 个运行更新的实例。

do_update_if_needed(15);

function do_update_if_needed($minutes)
{
    if ( isset($_SESSION['time_next']) && time() < $_SESSION['time_next'] ) return;

    // either time_next was not set, or it's time to update, so set next time:

    $_SESSION['time_next'] = time() + $minutes*60;

    // do your thing!
}

您还可以编写一个包含上次时间(或使用其上次修改时间)的简单文件。总的来说,我认为记录最后一次比记录一次更好,因为最后一次实际上讲述了已经发生的事情,而不仅仅是“计划”(这会引发一些问题,比如是谁的计划?为什么?等等。 )

*cleaner 是指:1)把它放在一个函数中,2)在一个地方做计算,而不是在两个分支if

于 2010-08-19T22:27:22.450 回答
0

你可能想DAEMONS为这种东西创建。

您绝对不应该像其他人更好地解释的那样走自己的路。

您也不应该使用 cron,因为如果该进程花费的时间超过您认为它应该花费的时间,它将超过另一个进程。这可能会让你的应用程序变得一团糟,这真的不是一个优雅的解决方案。

Adeamon将以静默方式在后台运行。将处理您需要的所有工作量,不会覆盖自身,也可以在预设的时间内运行。

看看 Kevin van Zonneveld 的这篇优秀教程

于 2010-08-19T22:40:12.640 回答