0

私はこれについて頭を悩ませることができないようです。

私は現在持っています:

$checkRunningSQL = $odb -> prepare("SELECT time,date FROM `api` WHERE `key` = :key  AND `time` + `date` > UNIX_TIMESTAMP()");
$checkRunningSQL -> execute(array(':key' => $_GET['key']));
$countRunning = $checkRunningSQL -> fetchAll();
$stillrunning = ($countRunning[0][time] + $countRunning[0][date]) - time();
if($stillrunning >= 1)
{
echo '<p><strong>ERROR: </strong>You currently have more than your allocated running.</p>';
die();
}

これは現在、次のようなテーブルをチェックインします。

ここに画像の説明を入力

現在実行中のものが1つある場合、これは正常に機能しています。ただし、キーごとに制限を設けたいと考えていました。ちょうど今、10 秒で実行されているものがある場合、その 10 秒が経過するまで別のものを起動することはできません。しかし、私が望んでいたのは、彼らが 5 を起動できるようにすることです。6 番目を起動しようとすると、エラーがエコーされます。

ページをリクエストするとき、MySQL に入力される引数を指定します。

$insertLogSQL = $odb -> prepare("INSERT INTO `api` VALUES (:key, :ip, :port, :time, :method, UNIX_TIMESTAMP())");
$insertLogSQL -> execute(array(':key' => $_GET['key'], ':ip' => $_GET['host'], ':port' => $_GET['port'], ':time' => $_GET['time'], ':method' => $_GET['method']));

1つではなく5つに制限する方法について頭を悩ませているようには見えません。これに投じられたアイデアは素晴らしいでしょう。

4

2 に答える 2

1

(挿入の前に)API キーの実行中のインスタンスの現在の量を確認していただけますか? 何かのようなもの:

$SESSION_LIMIT = 5;
$precheck = $odb->prepare("SELECT count(*) AS `active_sessions` FROM `api` WHERE `key` = :key AND (UNIX_TIMESTAMP() BETWEEN date AND (date + time))");
$precheck->execute(array(':key' => $_GET['key']));
if (($result = $precheck->fetch()) && $result['active_sessions'] >= $SESSION_LIMIT) {
    // too many sessions
    echo "Can't create any more sessions at this time";
}
于 2013-06-25T02:44:54.913 に答える