我不确定这是否可行,但我想我会问。
我正在开发一个基于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变量?
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
如果您想要检测单个用户的次数,$ _SESSION可以正常工作。
如果要检测所有用户(会话)的次数,则需要将其存储在db或文件系统或redis等内存缓存中。