0

このコードは、データベースからユーザー ID を抽出し、メッセージを送信します。問題は、メッセージをすべてのユーザーに同時に送信しようとしていて、データベースがダウンすることです。多くのユーザーに送信するとエラーが発生します。一度に1人または2人のユーザーにメッセージを送信し、メッセージ間で数秒の遅延を発生させるのを手伝ってくれる人はいますか?

$result = mysql_query("
        SELECT
            *
        FROM
            offline_access_users
    ");

    if($result){
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
            $msg['access_token'] = $row['access_token'];
            try {
                $facebook->api('/me/feed', 'POST', $msg);
                $output .= "<p>Posting message on '". $row['name'] . "' wall success</p>";
            } catch (FacebookApiException $e) {
                $output .= "<p>Posting message on '". $row['name'] . "' wall failed</p>";

            }
        }
    }
4

2 に答える 2

0

これを少し考える必要があります。

まず、たとえば 5 分ごとに実行されるcronjobでこれを行う必要があります。

その後、メッセージが送信されないように制限する方法を確認する必要があります。これは、1 人あたり 1 日 1 回 (または任意の制限) です。そのためmessage_sent_date、テーブルに追加のフィールドを作成する必要があります。

次に、cronjob 実行ごとのユーザー数を制限する必要があります。

// replace mysql with mysqli or PDO !!!
$result = mysqli_query($link, "
        SELECT *
        FROM offline_access_users
        ORDER BY message_sent_date ASC
        LIMIT 5
    "); // this takes the 5 users that received messages the longest time ago

次に、whileループ内でこのクエリを実行します (try ブロック内)。

$updateQuery = "UPDATE offline_access_users SET message_sent_date = CURRENT_TIMESTAMP WHERE id = {$row[id]}";

それはそれであるはずです、それがどうなるか教えてください。

結果

このスクリプトは 5 分ごとに実行され、メッセージを受信して​​いない 5 人のユーザーを選択します (ここでのロジックは必要なものによって異なるため、もう少し明確にする必要があります)。

于 2013-01-29T11:51:37.743 に答える
-1

以下のコードを試してください:

$offset = 0; //Starting Point
$limit = 2;  //Number of records to work with per loop
while(1)
{
    $result = mysql_query("
        SELECT * FROM offline_access_users LIMIT $offset,$limit
    ");

    if($result){
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
            $msg['access_token'] = $row['access_token'];
            try {
            $facebook->api('/me/feed', 'POST', $msg);
            $output .= "<p>Posting message on '". $row['name'] . "' wall success</p>";
            } catch (FacebookApiException $e) {
                $output .= "<p>Posting message on '". $row['name'] . "' wall failed</p>";

            }
        }
    }
    else
        break;
    $offset = $offset + $limit;
}
于 2013-01-29T11:52:23.317 に答える