精華區beta PHP 關於我們 聯絡資訊
各位好 小弟是php的新手,最近再幫某單位做大量發信的工作(EDM) 目前是托別人管理MAIL SERVER的福,大量寄信都沒什麼問題 只是跑上萬筆的迴圈寄信,一次一封,要等大約20分鐘網頁才會跑完 (也不知道這樣寫好不好) 使用者就是要開著那個頁面等個20分鐘 我知道有的系統是可以在使用者執行後,他可以關掉瀏覽器去做別的事情 剩下的伺服器會幫忙完成 現在想實作這一點 找了一些資料,但是很雜很亂,沒有頭緒 像是EXEC、排程等等 能不能請版上先進給點方向 我現在亂想一個是用 PHP 產 MAIL LIST 在用 EXEC 去執行 VBS(自己寫一個VBS寄信) 只是這樣亂湊感覺起來很鳥(沒試過也不知道能不能行)... 我的環境是WINDOWS SERVER 2008 用PHP的 MAIL() 在寄信 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.3.166
rock810:如果版上有我沒爬到的現成資料,我在自刪 12/20 10:22
twsphere:system exec ~~ 12/20 10:36
rock810:現在就糗在看了PHP Manual 還是不會用system 跟 exec... 12/20 10:49
rock810:應該說不知道怎麼應用在寄信上 12/20 10:50
mervynW:win 的排程 12/20 11:27
olctw:去找 phplist 吧 12/20 11:48
Bambe:用排程 +1 12/20 12:27
cleanwind:ignore_user_abort(true); 12/20 12:48
rock810:3Q各位,我去找找 12/20 13:28
hSATAC:mail queue cronjob 懶一點直接丟 AWS SES 12/20 16:37
thitbbeb:win排程, 程式裡可以設每次寄幾封 然後沒寄完就繼續exec 12/21 01:55
thitbbeb:exec("php 路徑/sendmail.php") 這樣用 12/21 01:55
rock810:3Qthitbbeb ,我試看看,照這樣寄信我的程式要在調整一下 12/21 14:42
popmentos:最近在學Gearman,感覺也不錯用。http://goo.gl/vjZAN 12/23 12:37
tyf99:如果只是要搞定工作,自己不想練功,可以考慮 phpmailer 12/23 13:20
> -------------------------------------------------------------------------- < 作者: pobie (嗯) 看板: PHP 標題: Re: [請益] 大量發信後端執行 時間: Thu Dec 20 12:49:19 2012 分享一下我類似的做法~~ 在後台編輯完EDM時 你可以給這個EDM ITEM一個時間,例如12:30 也可以給他一個排程開啟的選項 接著排程你可以自己要一個小時跑一次或一天一次都行 至於排程設定方式,寫一個給排程用的php 在用「php x:\xx\cron_send.php」指令下去跑 在排程的php裡,如果是一個小時一次,排程設定就每個整點檢查一次 例如12點一到,就去撈MySQL檢查12點到13點之間有沒有排程已開啟且要寄的EDM 系統一找到就會自動幫你寄,只是要注意可能會有逾時寄到一半斷掉的問題 可以搭配ignore_user_abort(true)與set_time_limit(0)來因應 或者寫個log之類的來紀錄當次寄出去的EDM有沒有寄完 用排程來做的好處就是使用者不用開網頁等半天等到寄完,甚至等到出現 500 (囧 所以還是建議寫排程來做吧!! 不知有沒有解答到你的問題 @@ 參考一下囉~ ※ 引述《rock810 ()》之銘言: : 各位好 : 小弟是php的新手,最近再幫某單位做大量發信的工作(EDM) : 目前是托別人管理MAIL SERVER的福,大量寄信都沒什麼問題 : 只是跑上萬筆的迴圈寄信,一次一封,要等大約20分鐘網頁才會跑完 : (也不知道這樣寫好不好) : 使用者就是要開著那個頁面等個20分鐘 : 我知道有的系統是可以在使用者執行後,他可以關掉瀏覽器去做別的事情 : 剩下的伺服器會幫忙完成 : 現在想實作這一點 : 找了一些資料,但是很雜很亂,沒有頭緒 : 像是EXEC、排程等等 : 能不能請版上先進給點方向 : 我現在亂想一個是用 PHP 產 MAIL LIST 在用 EXEC 去執行 VBS(自己寫一個VBS寄信) : 只是這樣亂湊感覺起來很鳥(沒試過也不知道能不能行)... : 我的環境是WINDOWS SERVER 2008 用PHP的 MAIL() 在寄信 : 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.44.121 ※ 編輯: pobie 來自: 220.133.44.121 (12/20 12:53)
rock810:3q~我試看看,搞定後我在分享 12/20 13:30
> -------------------------------------------------------------------------- < 作者: rock810 () 看板: PHP 標題: Re: [請益] 大量發信後端執行 時間: Wed Jan 16 14:15:12 2013 首先感謝cleanwind大以及pobie大 再抓緊時間查完資料後,這幾天終於有空檔開始實作 幫自己自問自答一下 : 不知有沒有解答到你的問題 @@ 參考一下囉~ : ※ 引述《rock810 ()》之銘言: : : 各位好 : : 小弟是php的新手,最近再幫某單位做大量發信的工作(EDM) : : 目前是托別人管理MAIL SERVER的福,大量寄信都沒什麼問題 : : 只是跑上萬筆的迴圈寄信,一次一封,要等大約20分鐘網頁才會跑完 : : (也不知道這樣寫好不好) : : 使用者就是要開著那個頁面等個20分鐘 : : 我知道有的系統是可以在使用者執行後,他可以關掉瀏覽器去做別的事情 : : 剩下的伺服器會幫忙完成 以上需求,只要一開始使用「ignore_user_abort(true);」就能解決 可以在執行發送mail迴圈後,關掉瀏覽器,伺服器那邊會接著完成 我這個案例使用ignore_user_abort(true);相當單純 但也有查到使用不慎,很容易浪費伺服器資源的相關資料 幾位前輩也有提到要配合set_time_limit,因為PHP預設只讓程式執行30秒 沒設定的話超過30秒就會中斷 : : 現在想實作這一點 : : 找了一些資料,但是很雜很亂,沒有頭緒 : : 像是EXEC、排程等等 : : 能不能請版上先進給點方向 : : 我現在亂想一個是用 PHP 產 MAIL LIST 在用 EXEC 去執行 VBS(自己寫一個VBS寄信) : : 只是這樣亂湊感覺起來很鳥(沒試過也不知道能不能行)... : : 我的環境是WINDOWS SERVER 2008 用PHP的 MAIL() 在寄信 再來是如果想利用排程來寄信,可以按照pobie大的建議 先單獨寫一段發送信件的php 然後再寫.bat檔的時候,直接使用「php x:\xx\cron_send.php」 .bat其實就是.txt檔改副檔名為.bat即可,通常不會有什麼問題(除非有編碼問題) 再利用win排程去執行 整體而言不難實作,也可能是因為我的需求比較單純 如果有什麼其他需求或變化,歡迎一起討論 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.3.166
FntsrSwl:用心回饋 01/17 02:50
tyf99:php預設只跑30秒,若沒用set_time_limit,可能沒寄完就終止 01/17 04:35
rock810:感謝樓上提醒,不過我是直接改php.ini,整個冒險 01/17 17:38
※ 編輯: rock810 來自: 140.124.3.166 (01/17 17:40)
AreTheyYou:我想問~如果程式在背景跑 臨時想關掉要怎麼關 ? 01/17 23:54
rock810:樓上,根據我以前的經驗,重啟阿帕契是大絕招 01/19 09:32
tyf99:一開始就getmypid,存檔。中斷或終止時讀取pid kill掉 01/19 09:38
tyf99:存檔記得清掉 01/19 09:46
dlikeayu:linux的hostname沒設好的話,一封信給php的mail()也會寄 01/22 01:02
dlikeayu:很久喔,有一部份是mis的功,設好之後每封幾乎是秒寄 01/22 01:02