如何在没有数据库的情况下按小时(最多:每小时1000个请求)管理执行限制

时间:2010-05-04 13:54:23

标签: php sqlite

我目前正在使用PHP开发一个脚本来获取网页。事实是,通过这样做,我偶尔会对特定网站提出过多请求。为了控制任何溢出,我想跟踪每个域在过去一小时左右完成了多少请求。它不需要是完美的,只是一个很好的估计。

除sqlite2外,我无权访问数据库。我真的很喜欢一些非常简单的东西,因为通常会有很多更新,这对于sqlite数据库来说有点沉重。如果没有人有神奇的解决方案,我会选择sqlite,但我很好奇你能想出什么

非常感谢

1 个答案:

答案 0 :(得分:0)

我找到了解决我的困境的答案,所以我想我会分享:

假设设置了$ file和$ max并进行了一些错误处理。 基本上,它使用时间戳有10个字节(带换行符的+1)的事实。 每隔一段时间,就会调用clean()来消除超过3600秒的时间戳

function check() {
    if (file_exists($file))
        return (filesize($file) / 11) < $max;
    else
        return true;
}
function writeLog() {
    file_put_contents($file, time() . "\n", FILE_APPEND);
}
function clean() {
    $f = fopen($file, 'r');
    while ($time = fgets($f)) {
        if ($now - $time < 3600) break;
    }
    while (!feof($f))
        $time .= stream_get_contents($f);
    fclose($f);
    file_put_contents($file, $time);
}

欢呼声