一定時間毎に同じ動作を繰り返し行うには・・・
色々試行錯誤していますが・・・うまく行きません・・・
どなたかお助けください!!
PHP4.xx SQLite3.xxです。
初心者です。
DBに登録されているメールアドレスリストに10秒ごとにメールを送信するプログラムです。
メールリストは300人くらいですが、一気に送るのはサーバー的に負荷がかかると考え一人目にメールを送り、10秒経ったら次の人・・・また10秒経ったら次の人・・・に送信という形にしたいです。
最初はPHPのファイルでFORで回して処理の最後にsleep(10)で遅延させたらいけると(浅はかにも)思ってやってみましたが、ブラウザの表示でtimeoutするようでダメでした。
そこで今はjava scriptでリフレッシュさせてリフレッシュ先のURLの最後にfilename.php?id=●の数字の部分を順番に+1して行って終わったら処理終わるという手法を考えましたが・・・それがうまく行きません。
1人目の処理はうまく行ってメールも送信されますが次の人へ送信するURLへのリフレッシュがうまく行きません。
考え方がおかしいのでしょうか?
それとも発想はいいけど、単にコードの問題なのでしょうか・・・?
ちなみに処理する毎に毎回「●●さんにメールを送信しました」と表示されるようにしたいのです。(つまりbodyでリフレッシュかけると何も表示されずに次の処理に行くので見てる方は実際に送られているかどうか心配。わざわざ毎回にみんなに電話して「メール来た?」といか確認してられないですし・・・)
実際に作ってみたコードはこのような感じです。
-------------(ここから)----------------------------------
<?
■■ここにメール送信のコードがあります。これは実際に届いているのでOKです。
if (!$mail->send()){
echo("メールが送信できませんでした。エラー:".$mail->getErrorMessage());
} else {
$message = "会員No:".$id." <b>".mb_convert_encoding($row["name"], "SJIS", "EUC-JP")."</b>様にメール配信しました。";
■■↑毎回処理する毎に会員NOと名前+「送信しました」メッセージが表示されるようします。
sleep(5);
$id++; //次の人に行くためにidを追加します。
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
■■リフレッシュのjs部分 $idはDBから取得してます。GETがでid指定がない時は「1」が入るようになっていてそこからスタートします。
<SCRIPT language="JavaScript">
<!--
function refresh()
{
location.href = "haishin_send01.php?id=<?=$id?>";
setTimeout('refresh()', 5000); //5秒にリフレッシュする予定
}
// -->
</SCRIPT>
<title>メルマガ配信テスト</title>
<p>
<?=$message?>
</p>
■■ここで処理が終わって次のURLへリフレッシュする
<SCRIPT language="JavaScript">
<!--
refresh();
// -->
</SCRIPT>
</body>
</html>
お礼
有難うございます。urlもとても参考になりました。ですが私はwindows系サーバーも利用していますので、出来ればwindows系サーバーでも可能な方法があれば助かります。perlは勉強して間もないため、forループは使ったことがないのですが、ループさせている間はサーバー負荷がかからないでしょうか。出来れば少ないサーバー負荷で指定された時間、待機できる方法があれば、宜しくお願いいたします。
補足
sleepを使って出来ました。因みに、これはサーバー負荷はあまりかからないのでしょうか?