2

私は、1 時間あたり 500 メールに制限されている標準の共有 Hostgator を使用しています。

メールスクリプトを調整して、8 秒ごとに 1 つのメールのみを送信しようとしています...

$query=mysql_query("SELECT email FROM users WHERE verified='1' ORDER BY balance DESC");
while($arr=mysql_fetch_array($query)){
set_time_limit(30);
$mail->AddAddress($arr[0]);
$mail->Send();
$mail->ClearAddresses();
echo "Sent to ".$arr[0]."<br><br>";
sleep(8);
}

私はPHPMailerを使用しています。スクリプト自体は正常に動作し、8 秒ごとにメールを送信します...

しかし、ドメインの残りの部分は完全にフリーズします。

ドメイン全体をフリーズさせずに使用できる別のスリープ方法はありますか?

ありがとう :)

4

4 に答える 4

1

Cronjobs は 2 番目に実行できず、1 分ごとにのみ実行されます。*/1分フィールドに を指定すると、1 分ごとにスクリプトが実行されますが、それ以上の粒度は得られません。

スリープに問題はありませんが、ブラウザからコマンドを実行しないでください。ドメインをロックしている理由は、スクリプトで Apache スレッドがスリープ状態で保持されているためです。完了するまで、リクエストはブロックされ、キューに入れられます。

スクリプトを保持し、1 時間ごとまたは数時間ごとに cronjob で実行することをお勧めします。どのくらいの頻度で実行する必要がありますか? 一日一回?

以下は、毎晩深夜 5 時に実行し、バックグラウンドにスローします。

5 0 * * * user php -f /path/to/file &
于 2012-08-23T22:58:53.350 に答える
1

設定した期間にこのスクリプトを呼び出すには、cron ジョブ (Unix) またはスケジュールされたタスク (Windows) を使用することをお勧めします。

または、Mandrillなどを使用して、一括メールの送信を処理します。

于 2012-08-23T22:51:18.353 に答える
0

while ループでサーバーをロックしています。8 秒ごとにループの 1 つのパスを実行し、さらに 8 秒間待機します。他のすべては、完了するまで待つ必要があります。cron ジョブを使用してみてください。

于 2012-08-23T22:54:47.867 に答える
0

これは、スクリプトが常に実行されていて、リクエストごとにデータベースを再読み込みしない限り、スクリプトに直接実装することはできません。

8 秒ごとに実行され、データベースから最初のエントリを読み取り、存在する場合はメールを送信する cron ジョブをお勧めします。

  1. 8 秒ごとにスクリプトを呼び出すように cron ジョブを設定する
  2. スクリプトは、テーブルの最初のエントリについてデータベースにクエリを実行します
  3. データが存在する場合は、そのデータに基づいてメールを送信します
  4. 行を削除する
  5. スクリプト終了
于 2012-08-23T22:52:48.677 に答える