Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
cronを利用してのPHPスクリプトでのメール配信 - PHPプロ!Q&A掲示板
[go: Go Back, main page]

<< phpの絞り込み検索について教えてくだ... 質問一覧 類似画像の検索 >>

  • 募集中!! 0P
cronを利用してのPHPスクリプトでのメール配信

メールマガジンを指定の時間に配信するシステムを制作予定です。

となると、cronで指定した時間にPHPを実行する、となると思うのですが。
1つ問題があって、共有サーバーなのでメールの配信数に制限があり、1時間に1000通までとなっています。

これは手動のメルマガ配信では、ajaxを使用して、ブラウザから8秒に2通送信させる形で対応しています。

しかしcronを利用するとなると、それもできないですし、プロセスが30秒以上かかってしまうcronの実行は禁止とのことです。

そうなるとPHPでsleepで遅延させる、ということも難しい。

何か他にいい手はないものか考えているのですが、どなたかいい方法をご存知でしたらお教え下さい。

PS cronで実行する言語としてPHPは適さない、との意見を以前他のサイトで見つけたことがあります。
  それって、具体的にはどういうことなんでしょうか?
Qcronを利用してのPHPスクリプトでのメール配信 info_ms  [09月27日 18時48分] NEW!
┣Re:cronを利用してのPHPスクリプトでのメール配信 NurseAngel  [09月28日 01時23分] NEW!
┗Re:cronを利用してのPHPスクリプトでのメール配信 gallu  [09月28日 18時59分] NEW!

コメント一覧

並び替え( ツリー順 / 投稿順[降順] / 投稿順[昇順]

Re:cronを利用してのPHPスクリプトでのメール配信

メルマガとユーザをDBで管理していると仮定して。

まずメルマガ取得
select * from メルマガマスタ where sended_flg=0 and send_start>now() limit 1
として送信が終了していない、かつ送信開始時刻以降のメルマガを取得、
ユーザ取得時に
select * from ユーザマスタ where sended_flg=0 limit 1000
として未送信フラグの立っているユーザのみを1000件取得。

メールの送信後
update ユーザマスタ set sended_flg=1 where ユーザID=***
としてユーザ毎にメール送信済をチェック。
これを一時間毎にcronで実行
とかでいいのではないでしょうか。

最終的にユーザが一人も取得できなくなったら、
update メルマガマスタ set sended_flg=1 where メルマガID=**
update ユーザマスタ set sended_flg=0
としてメルマガの送信完了を設定すると。


単純に実装すると、メルマガを同時に沢山登録したら古いメルマガが送られないユーザが出てきたりする可能性があったりします。
まあそこらへんはテーブルとSQLの組み方でどうにかなりますので適当に。

一気に1000件だと30秒超えると思うのでもう少し小刻みにした方がいいかも。
勿論サーバの上限が1000件/時間ですので、同時に2000人にメールを送信するとかは無理です。

Re:cronを利用してのPHPスクリプトでのメール配信

がると申します。
色々問題異論その他ありますが。取り急ぎ「バックグラウンドで処理をさせたい」のであれば、UNIX系のOSである事を前提に、
[言語][プログラミング][PHP]場当たり的バックグラウンド処理 PHP編
http://d.hatena.ne.jp/gallu/20070911/p1
このあたり、お役に立ちませんでしょうか?

手前味噌恐縮ですが。
phpの絞り込み検索について教えてくだ... 質問一覧 類似画像の検索