Как управлять лимитом выполнения по часам (максимум: 1000 запросов в час) без базы данных - PullRequest
0 голосов
/ 04 мая 2010

В настоящее время я разрабатываю скрипт на PHP для извлечения веб-страниц. Дело в том, что, делая это, я иногда делаю слишком много запросов на конкретный веб-сайт. Чтобы контролировать любое переполнение, я хотел бы отслеживать, сколько запросов было сделано за последний час или около того для каждого домена. Это не должно быть идеально, просто хорошая оценка.

У меня нет доступа к базе данных, кроме sqlite2. Мне бы очень хотелось чего-то очень простого, потому что обычно будет много обновлений, что довольно тяжело для базы данных sqlite. Если у кого-то нет волшебного решения, я пойду на sqlite, но мне было любопытно, что вы можете придумать

Большое спасибо

1 Ответ

0 голосов
/ 04 мая 2010

Я нашел ответ на мою дилемму, поэтому я решил поделиться:

Предположим, что $ 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);
}

ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...