
色々試行錯誤していますが・・・うまく行きません・・・
どなたかお助けください!!
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-transitio …
<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>
No.2ベストアンサー
- 回答日時:
案1.タイムアウト延長
300人×10秒=3000秒 とのことなのでサーバー(apache)のタイムアウトが先に引っかかるかもしれませんが、
set_time_limit(3000);//実際は余裕を持った時間に
でまずはPHPのタイムアウトを防止します。
ブラウザのタイムアウトは、定期的にデータを送って回避します。
例は、下記
http://kikky.net/pc/php_timeout.html
案2.バックグラウンド実行
サーバーにcli版のphpが入っている前提ですが
(注 絶対にレンタルサーバーでデバッグはしないこと)
system("/usr/local/bin/php sendml.php > /dev/null &");
バックグラウンド実行用のスクリプト sendml.php とそれを実行させるスクリプトで構成します。
進行状況を知りたい場合は、ファイルに定期的に進捗を吐き出して
それを読むスクリプトが必要です。
案2はバグが有ると悲惨なことになりますので十分ローカルでチェックした後に運用すること。自己責任で!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6にてメールを送信する方法
-
PHPメールフォームからの受信に...
-
ロリポップと、phpで自動の返信...
-
Bookを閉じて保存した時のみ実...
-
メール送信 MAPIMessages.Send ...
-
VBでメールを送る時のSMT...
-
FTPコマンドでディレクトリごと...
-
PHPで、エラーがない場合のみ画...
-
libpng 24bpp rawをPNGに変換す...
-
PHPで画像アップロード時にサイ...
-
PythonのTkinter詳しい方へ。画...
-
フォントの色を変えるには?
-
PHPで吐き出した画像にリンクを...
-
現在位置より2つ上のディレク...
-
「include()」関数の使い方につ...
-
.htaccessファイルの修正がこれ...
-
【file_exists】ファイルが存在...
-
sqlで日付が一番古いデータの月...
-
バッチを用いたフォルダの自動移動
-
^[a-zA-Z_][a-zA-Z0-9_]* でマ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6にてメールを送信する方法
-
VBでメールを送る時のSMT...
-
ループの中で mailItemObj.Disp...
-
PHPでメール送信する際の送信数...
-
submitボタンの二重送信について
-
問い合わせ完了ページでの二重...
-
HPの更新をしたら自動でメール...
-
ブラウザの更新ボタン
-
【エクセルVBA】メール送信前に...
-
コマンドプロンプトで添付ファ...
-
【追加】ファイルを閉じてダイ...
-
空メール送信~メールアドレス取得
-
<a href=
-
SendMailがエラーを返さない
-
windowsXP XAMPP(PHP、apache、...
-
コマンドの内容を教えてください。
-
★エクセルVBAでOutlookのメール...
-
この文字化け文字を解読できますか
-
送信日時を指定してメールを送...
-
AJAXMAILのカスタマイズについて
おすすめ情報