检测函数是否在短时间间隔内调用了太多次

时间:2014-02-09 09:46:56

标签: php session-variables

我不确定这是否可行,但我想我会问。

我正在开发一个基于wordpress的网站,该网站已经在数据库中拥有相当多的数据。

当我为网站编写新代码时,我使用我编写的函数(getDebug)来自行发送“电子邮件”代码中发生的事情。

现在几次(由于粗心或无知)我将调试函数留在递归循环中,循环遍历数据库中的每个“post”。结果是我锁定了我的测试网站,同时它很高兴地向我发送了10,000封电子邮件。

我想知道是否有可能检测到某个时间段内某个函数被调用了多少次,如果它超过一个数字,那么就停止执行该操作。

我想知道这是否可以通过会话完成?

以下是一个例子:

foreach($allPostIDs as $postID) {
 getDebug("Check postID ".$postID); // oops, I'm going to email on each iteration
 // rest of foreach....
} 

我知道以下内容不起作用,但这可以让您了解我想做什么(除非有更好的方法来实现这一点):

/* ======================================================= */
// SENDS AN EMAIL TO ADMIN WITH DEBUG INFO
/* ======================================================= */
if (!function_exists('getDebug')) {
    function getDebug($var = null, $extraInfo = null) {
        if(
          $_SESSION("HowManyTimesCalled") < 10 && 
          $_SESSION("TimeSinceLastCall") > 10
         ) {
            $adminEmail = new FAR_Email_Class();
            $adminEmail->addDebugVar($var);
            $adminEmail->addExtraInfo($extraInfo);
            $adminEmail->sendEmail();
        }
            $_SESSION("HowManyTimesCalled")++;
            $_SESSION("TimeSinceLastCall") = time();
    }
}
/* ======================================================= */
// END OF FUNCTION
/* ======================================================= */

我不确定如果浏览器没有刷新,是否会更新$ _SESSION变量?

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

如果您想要检测单个用户的次数,$ _SESSION可以正常工作。

如果要检测所有用户(会话)的次数,则需要将其存储在db或文件系统或redis等内存缓存中。