1

実行ごとに 500 の制限ですべてのユーザーをループする非常に単純なスクリプトを作成しました。

次のことを行います。

  1. ユーザーデータを選択
  2. 行を挿入します
  3. ユーザーにメールを送信
  4. 行を更新します
  5. 次のユーザー

意図したとおりに機能し、正常に完了します。

ただし、実行すると、このスクリプトの実行が完了するまで「ロード」するだけなので、別のウィンドウで Web サイトを使用できませんか?

スクリプトが実行中にユーザー テーブルをロックしているように見えますが、これは発生しないはず$resultです。

しかし、ウェブサイトがフリーズしている間に sqlyog を介してデータベースにクエリを実行できるので、そうではありませんか? あまりにも多くのリソースを使用している可能性がありますか?

スクリプト- 例

<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

$i = 1;

$ses = new simpleemailservice();

$result = mysql_query("SELECT id, username, email FROM `user` WHERE thiscol = 0 LIMIT 500");

while($row = mysql_fetch_row($result)){

    mysql_query("INSERT INTO table (data) VALUES (1)");

    $m = new SimpleEmailServiceMessage();

        $m->addTo($row[1]." <".$row[2].">");
        $m->setFrom("Emailer <no-reply@emailer.com>");
        $m->setSubject("Subject");
        $m->setMessageFromString("Email Text", "Email HTML");

    if($ses->sendEmail($m))
        mysql_query("UPDATE `user` SET thiscol = 1 WHERE id = ".$row[0]);

    $i++;
}
?>
4

1 に答える 1