Bir veritabanı olmadan: Nasıl saate göre yapılması gereken infaz sınırını (saatte 1000 kişi, açılış Max) yönetirim

1 Cevap php

Şu anda web sayfalarını almak için PHP bir script geliştiriyorum. Aslında böyle yaparak, zaman zaman belirli bir web sitesi için çok isteklerini yapmak olduğunu. Herhangi bir taşma kontrol etmek için, ben her etki alanı için son bir saat ya da öylesine yapılmış kaç istek iz tutmak istiyorum. Bu, sadece iyi bir tahmin mükemmel olması gerekmez.

Ben SQLite2 dışında, bir veritabanına erişimi yok. Ben gerçekten basit bir şey gibi tipik tür ağır bir sqlite veritabanı için güncelleştirmelerin bir sürü olacaktır çünkü. Kimse büyülü bir çözüm varsa, size gelip ne ben sqlite için giderim, ama merak ettim

Thank you very much

1 Cevap

Benim ikileme bir cevap buldum, ben paylaşmak istedim:

Assume $file and $max are set and wrap with a bit of error handling. Basically, it uses the fact that a timestamp has 10 bytes (+1 with newline). Every now and then, something calls clean() that eliminates timestamps older than 3600 seconds

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);
}

şerefe