実行ごとに 500 の制限ですべてのユーザーをループする非常に単純なスクリプトを作成しました。
次のことを行います。
- ユーザーデータを選択
- 行を挿入します
- ユーザーにメールを送信
- 行を更新します
- 次のユーザー
意図したとおりに機能し、正常に完了します。
ただし、実行すると、このスクリプトの実行が完了するまで「ロード」するだけなので、別のウィンドウで 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++;
}
?>