2010-08-19 62 views
1

再次嘿!我试图编写一组脚本,只有在它们上次运行超过15分钟后才能在页面上运行。基本上,一个自动脚本每半小时更新一次我的数据库 - 并且显示该信息和更新会话变量的页面显然必须在数据库打开时查询数据库。需要时间间隔测试脚本的代码批判PHP

因此,为了最大限度地减少查询,并保持安全,我认为会话变量只会在数据库中更新,如果该页面上次查看时已超过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);  
} 

您怎么看?这会工作吗?

+0

你知道每个用户都有自己的一套会话数据吗?如果有100人查看此页面,您的代码最终会每15分钟运行一次。如果你想每15分钟运行一次,你应该使用类似于数据库的东西。或者,甚至更好,只需使用cron。 – 2010-08-19 22:18:53

+0

是的,我想 - 这实际上是必要的。这个项目是一个网络应用程序,所以每个同时使用它的用户都需要从数据库访问他们自己的特定数据。根据每个用户的一系列不同因素,他们的数据可能会以不同的方式显示。 因此,本质上,是的脚本需要更新每个用户在他们自己的时间表,因为每个用户将看到不同的数据。 – user405056 2010-08-19 22:22:21

+0

哦,其实很抱歉,我误解了你的答案。是的,数据库中已经有一个CRON脚本,每30分钟更新一次。每个INDIVIDUAL USER都访问该数据,并将其放入显示(并在其他页面中使用)的某些会话变量中 - 因此,如果它们导航到不同的页面然后返回,那么数据可能会在此处不同。我试图做到这一点,因此数据库不会被查询每次他们回到那个页面,只是如果它是15分钟,因为我的30分钟自动脚本很可能不会在那15分钟的时间内运行。 – user405056 2010-08-19 22:26:45

回答

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! 
} 

你也可以编写一个包含上次(或使用它的上次修改时间)的简单文件。一般来说,我认为最好记录最近的时间比下一个时间,因为最后时间实际上告诉发生的事情,不只是“一个计划”(这导致了问题,像谁的计划是它为什么等)

*清洁剂是指:?1)把它放在一个功能,和2)做计算在一个地方,不是在if

+0

完美。同样,我明确知道脚本将运行10次,但它对于应用程序的功能非常关键。 你的代码看起来比我的效率高得多。非常感谢! – user405056 2010-08-19 22:36:29

+0

哇,实际上,是的,仔细检查,比我的更好。再次感谢! – user405056 2010-08-19 22:37:55

0

两个分支你可能希望创建DAEMONS对于这种事情。

你肯定是不应该走你的方向作为别人有更好的解释。

不应该使用cron,因为如果过程需要更多的,你认为它应该会OVERUN其他进程的时间。这可能会让你的应用程序变得混乱,这实际上不是一个优雅的解决方案。

A deamon将以无声方式在后台运行。将处理所有你需要的工作量,不会覆盖自己,也可以在预先设定的时间内运行。

Take a look at this excellent tutorial by Kevin van Zonneveld

+0

如果我没有自己托管网站,我该如何安装守护进程?尽管每半小时自动执行一次的脚本非常简单,并且用户在每次加载“仪表板”页面时访问的脚本只能检索数据以供查看,但它绝对看起来还是要走的路。我不知道,我想我已经在我的脑海里了... – user405056 2010-08-19 23:11:59

+0

@ user405056好吧......也许你是。如果你不需要,不要过于复杂。只要写一个关于“守护进程”的心理笔记,当出现问题的概率很高时,你就会知道要走的路! ;) – Frankie 2010-08-19 23:17:45

+0

是的,我想是的!也许当我的应用程序有60亿用户,并且我以数亿美元游泳时,我可以找出守护程序哈哈!无论如何,我会认真阅读 - 再次感谢您的帮助! – user405056 2010-08-19 23:44:49