色々試行錯誤していますが・・・うまく行きません・・・

どなたかお助けください!!

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>

このQ&Aに関連する最新のQ&A

A 回答 (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はバグが有ると悲惨なことになりますので十分ローカルでチェックした後に運用すること。自己責任で!
    • good
    • 0

時間の掛かる処理をサーバサイドで実行するには、いくつか方法があるでしょうが、



一件送信する毎に、

1件目送信しました。<br>

などをブラウザに送ってみてはいかがですか。

この回答への補足

それは具体的にはどうするのでしょうか・・・?

またレンタルサーバーなのでCRON等は使えません。

補足日時:2009/05/28 09:55
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q3分足もしくは1分足チャートを探しております

現在楽天証券のマーケットスピードを使っていますが
やはりこれでは五分足のチャートとティックしかなく少し不便な感じがしてます
もし3分足や1分足のチャートやソフトがあれば教えて頂けないでしょうか?

Aベストアンサー

マケスピは1分も3分も見れます。

1.投資情報の個別チャート分足画面を選択
2.右クリックで分足指定

Qprint "{$data[$i][$j]}";の $dataと「直接関係」がある

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都のデータを格納します。
$data[3][2] = 19;
$data[4][0] = "福岡";
$data[4][1] = 27;//$data[4][●]に福岡のデータを格納します。
$data[4][2] = 22;

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>都市名</th>
<th>最高気温</th>
<th>最低気温</th>
</tr>

<?php

for($i=0; $i<count($data); $i++){
print "<tr>";
for($j=0; $j<count($data[0]); $j++){
print "<td>{$data[$i][$j]}</td>";//配列の要素を出力する。
}
print "</tr>\n";
}

?>

</table>

</body>
</html>
以上ですが・・・だんだん難しくなってきました!
 さて
  print "<td>{$data[$i][$j]}</td>";の $dataと「直接関係」があるところは
 1) for($j=0; $j<count($data[0]); $j++){  
 2)$data[0][0] = "東京";~$data[4][2] = 22;
  の1)2)のどちらと「直接関係」があるのでしょうか?
 以上よろしくお願いいたします。

<!DOCTYPE html>
<html>
<head>
<title>P185 Sample6-15▸ 多次元配列</title>
</head>
<body>

<?php

$data[0][0] = "東京";
$data[0][1] = 32;//$data[0][●]に東京のデータを格納します。
$data[0][2] = 25;
$data[1][0] = "名古屋";
$data[1][1] = 28;//$data[1][●]に名古屋のデータを格納します。
$data[1][2] = 21;
$data[2][0] = "大阪";
$data[2][1] = 27;//$data[2][●]に大阪のデータを格納します。
$data[2][2] = 20;
$data[3][0] = "京都";
$data[3][1] = 26;//$data[3][●]に京都の...続きを読む

Aベストアンサー

> の1)2)のどちらと「直接関係」があるのでしょうか?

No.1さんと同じく質問の意味が理解できません。
わかり易く補足いただいた方が良いかと思います。



”の1)2)のどちらと「関係」があるのでしょうか?” というご質問であれば

”どちらとも関係あります” という回答になります。

Q【数学】分数の読み方を教えてください。 2 - 4 - 1 - 3 だと読みは「3分の1分の4分の2

【数学】分数の読み方を教えてください。


2
-
4
-
1
-
3

だと読みは「3分の1分の4分の2」って読むんですか?

あと計算の仕方が

2
-
4
-
1
-
3



2×3
----
4×1

になって

6
-
4



3
-
2

が答えになるのはなぜですか?

なぜ分子と分子掛けて分母と分母を掛けたら答えになるの?

1
-
2
-
1
-
2

は半分分の半分は1個になる???

ケーキが半分あります

その半分の半分が一個って数学は不思議な世界ですよね

分母が半分スタートなのにゴールしたら1になってるんだから何かのマジックですかと聞きたい。

しかも半分の半分の半分は1ときた。

どういうことでしょう。

Aベストアンサー

半分を半分で割ったら1つですよね。考え方としては半分の中に半分はいくつありますか?1つですよね。
(同じ数字で割ればいつでも1になりますよね)

Qループ forに関して for($i = $num ; $i < $max ; $i++)

phpの初心者です。

以下の記述ですが、上手にループしてくれません。

for($i = $num ; $i < $max ; $i++)

$num の部分に「0」を入れると稼動するのですが、変数を代入したいというのが希望です。

方法があったらご教授下さい。

Aベストアンサー

もう一度全体のコードを見直してみてください。
問題なく動作します。

$num = 1;
$max = 5;

for($i = $num ; $i < $max ; $i++){
echo $i."<br />";
}

QVista パソコン 動作をしないと1分くらいで すぐにログアウト

Vista パソコン 動作をしないと1分くらいで すぐにログアウト

vista のパソコンを使っているのですが、最近、動作をしないと
1分くらいで、すぐにログアウトになってしまいます。

パスワード設定しなければいいのでしょうが、それはさすがにはずしたくなく…
10分くらい動作せずにログアウトされるような設定にするには
どうすればよいでしょうか?

こちらの環境としては
・スクリーンセーバーは使ってないません
・電源オプションもチェック済み
・ディスプレイ電源を切る設定も10分程度にしてある
・コンピュータースリープ状態も10分程度にしてあります。
・ハードディスクが次の時間経過後も10分程度

恐れ入りますが、何卒宜しくお願いします。

Aベストアンサー

コントロールパネルのデスクトップカスタマイズの個人設定で、

スクリーンセーバーの設定をクリックします

そこに再開時にログオン画面に戻るという項目にチェックついてませんか

待ち時間設定の右側です。

そこも確認済みでしょうか・・

Qforeach($stock as $name => $value){ の$value)で値用の変数

<!DOCTYPE html>
<html>
<head>
<title>P161 Sample6-7 array()を使う</title>
</head>
<body>

<?php

$stock = array("みかん"=>80,"いちご"=>60,"りんご"=>22, "もも"=>50,"くり"=>57);

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>番号</th>
<th>個数</th>
</tr>

<?php

foreach($stock as $name => $value){
print "<tr><td>{$name}</td><td>{$value}個</td></tr>\n";
}

?>

</table>

</body>
</html>
以上の foreach($stock as $name => $value){ 
 のforeach文は特殊な繰り返し文で$stockは”変数名”・$name"はキー(引出し)用の変数・
 ここまでは何となく意味がわかります。最後のは$valueは”値用の変数”・・とあります。
 ここで言う、”値用の変数”の値とは何のことなのでしょうか? 
 よろしくお願いいたします。

<!DOCTYPE html>
<html>
<head>
<title>P161 Sample6-7 array()を使う</title>
</head>
<body>

<?php

$stock = array("みかん"=>80,"いちご"=>60,"りんご"=>22, "もも"=>50,"くり"=>57);

?>

<table border="2">
<tr bgcolor="#AAAAAA">
<th>番号</th>
<th>個数</th>
</tr>

<?php

foreach($stock as $name => $value){
print "<tr><td>{$name}</td><td>{$value}個</td></tr>\n";
}

?>

</table>

</body>
</html>
以上の foreach($stock as $name => $value){ 
 のfor...続きを読む

Aベストアンサー

$name には、"みかん"、"いちご" など。$valueには、80や60が入ります。

> $stock = array("みかん"=>80,"いちご"=>60,"りんご"=>22, "もも"=>50,"くり"=>57);

の => という記号と対応しているでしょ?

Q65歳未満の在職老齢年金の支給停止の計算式について

65歳未満の在職老齢年金の支給停止の計算式について
自分の給与からの在職年金の額をサンプル的に算出したのですが、誤っていませんでしょうか?
■275,000-〔税引き等なし・通勤費込み〕支給額
■66,000-〔800,000÷12〕月当たり年間賞与
■78,000-〔936,000÷12〕月当たり在職年金の額

275,000+66,000=341,000〔総報酬額〕
341,000+78,000=419,000
〔419,000-280,000〕÷2=69,500〔カット額〕
◎78,000-69,500=8,500〔月当たり在職年金の額〕
こんな風に単純計算したのですが、よろしいでしょうか?
〔別件としてご質問いたします〕

Aベストアンサー

http://www.nenkin.go.jp/main/detailed/pdf/kounen07.pdf の11頁・12頁・13頁に詳細な計算式が説明されています。
これに基づいて計算します。
給与額ではなく標準報酬月額を採らなければならないので、その時点で既に計算を誤っています。

正しくは、ざっくり計算すると以下のとおりとなると思います。
上述したPDFを参考にして、計算し直してみて戴けると幸いです。

総報酬月額相当額
=その月の標準報酬月額+(直近ぬ年間に受けた賞与額の合計)÷12

基本月額
=年金額(加給年金額を除く)÷12

標準報酬月額=28万円(月額の給与支給額より、厚生年金保険料額表を使って算出)
直近1年の賞与額の合計÷12=67,000円

基本月額=加給年金額がないとして、936,000÷12=78,000円

総報酬月額相当額=347,000円(280,000円+67,000円)

基本月額が28万円を超えておらず、総報酬月額相当額が48万円を超えていない
⇒ 支給停止基準額=[(合計収入額-28万円)÷2]×12
⇒ (基本月額+総報酬月額相当額-28万円)÷2×12
⇒ (78,000+347,000-280,000)÷2×12=870,000

年金支給額(年額)
=936,000-870,000=66,000円(5,500円/月)
 

http://www.nenkin.go.jp/main/detailed/pdf/kounen07.pdf の11頁・12頁・13頁に詳細な計算式が説明されています。
これに基づいて計算します。
給与額ではなく標準報酬月額を採らなければならないので、その時点で既に計算を誤っています。

正しくは、ざっくり計算すると以下のとおりとなると思います。
上述したPDFを参考にして、計算し直してみて戴けると幸いです。

総報酬月額相当額
=その月の標準報酬月額+(直近ぬ年間に受けた賞与額の合計)÷12

基本月額
=年金額(加給年金額を除く)÷1...続きを読む

Q$1$2$3 $2が空だったら$1と$3割る。

タイトルどおりです。

$1=100
$2=200
$3=300

これが

$1=100
$2=''
$3=300
と空だったら
($1+$3)/2
と、するにはどうしたら良いですか??

更に

$1=100
$2=''
$3=''
$4=400

と、空が二つ入った場合

$1=100
$2=200
$3=300
$4=400

と、折れ線グラフで表したら綺麗に直線にしたいんですが、どういう計算式、プログラムで出来ますか??

Aベストアンサー

まじめに答えれば「$1」なんて文法的に使えない例をあげられても
答えようがない

たとえば$aと$cだとして、変数名だけ見て$bが省略されているなんて
判断できない。

Qアラームが1分で停止しないメーカーの目覚まし時計

こんばんは

目覚まし時計の購入を検討しております。

以前にCASIOのDQD-700Jという目覚まし時計を購入したのですが、
アラームが1分で停止する仕様の為、今度は1分で停止せず、鳴り続ける物を購入したいです。

調べてみるとCASIOやSEIKOは1分でアラームが停止する仕様のようで…
(全ての機種がそうなのかは不明ですが)

どういったメーカーの物が良いのでしょうか?

以上、宜しくお願い致します

Aベストアンサー

 SEIKOのDL207です。
 AC電源なので電池切れないし、電波時計なので時刻合わせも必要なし。アラームは5分鳴り続けます。難点は価格が高いことです。
http://www.seiko-clock.co.jp/product-master/dl207s/


人気Q&Aランキング

おすすめ情報