2014-02-09 42 views
2

我不確定這是否可能,但我想我會問。檢測一個函數是否在很短的時間間隔內被調用太多次

我正在開發一個基於wordpress的網站,在數據庫中已經有相當多的數據。

當我爲該網站編寫新代碼時,我使用了一個函數(getDebug)來自我發送代碼中發生的事情。

現在有幾次(由於粗心或無知)我已將循環調試函數留在數據庫中的每個「後期」循環中。其結果是,我鎖定了我的測試網站,同時它高興地向我發送了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 vars是否會更新,但如果瀏覽器不刷新?

有關如何實現此目的的任何想法?

回答

1

如果您想要檢測單個用戶的次數,$ _SESSION可以工作。

如果您想要檢測所有用戶(會話)中的次數,您需要將其存儲在數據庫中,文件系統中或存儲器緩存中,如redis。

相關問題