2012-05-17 42 views
2

我有一個基於PHP的網站,預訂/約會存儲在MySQL數據庫中。在某個事件發生前24小時安排電子郵件通知?

我想設置一個電子郵件通知,發送給每個在預訂前24小時預訂的人。預訂通過常規的PHP表單添加。

我知道我可以添加一個腳本,例如,檢查數據庫的最後24小時內的任何預訂的索引頁,但這是不可靠的,因爲我一開始並不會獲得很多流量。因此,索引頁可能會在沒有訪問的情況下花費數小時,並且通知將延遲數小時。

想到的另一個解決方案是設置一個每分鐘運行的cron作業,調用一個PHP腳本來檢查是否應該發送和發送任何電子郵件。但我不確定這是否有點矯枉過正;有沒有人比每分鐘在後臺運行一個更好的解決方案?

總結一下 - 有沒有辦法做到這一點沒有cron?

+0

我很確定你可以使用cron來設置一個非常特定的時間和日期來執行你的腳本。爲什麼不使用它? –

+0

由於用戶通過PHP創建預訂,我怎樣才能從那裏動態地添加一個cron作業? – jovan

回答

1

從網頁觸發的工作是一個非常糟糕的主意,這有兩個原因:(1)如果你沒有獲得流量你的網站,工作不運行; (2)如果您收到大量通知,則該作業將減慢對Web請求的響應(假設您同步調用作業)。

我強烈建議您不要每分鐘都要做一份工作 - 這絕對會是一種矯枉過正的行爲。相反,想想你是否真的需要「正好24小時」的間隔或「22至26小時之間」是否可以。

我們有類似的要求 - 通過設置一個每4小時運行一次的作業並檢查哪些通知需要發送以便在腳本運行時間22到26小時之間開始的事件發送。這樣,腳本一天只執行6次,所有內容都可以正確發送。

如果4小時的近似值不夠好,那麼請考慮適當的最大間隔。我相信1小時就足夠了。讓腳本每小時運行一次(從cron開始),並檢查從運行開始的23到24小時之間的事件。請記住,一旦您的電子郵件發送完畢,它不會立即收到收件人的收件箱中:有時需要幾秒鐘,但有時可能需要一個小時甚至更多 - 因此腳本中的額外小時差異將不會是一個問題。

+0

是的,我認爲是同樣的事情,但客戶爲什麼要求精確度。我想答案是說服他,否則:) – jovan

+0

@robert嘗試向客戶解釋,電子郵件是不是一個時間可靠的溝通方式。如果您現在發送電子郵件,那麼收件人可能會在幾小時後才收到郵件。 –

0

您不需要使用cron作爲interval'd計時器。當你想完成工作時,你可以設定一個非常具體的日期和時間。

Here's an article on the subject

例如:

0 0 18 5 * <php command here> 

將在午夜開始5月18日。在下一次迭代(明年)之前,有足夠的時間來清除它。

+0

對不起,但是如何爲每個預訂手動添加一個cron作業,用戶對我的想法做出了改進? – jovan

+0

@robert:在我附加的文章中說過,您可以從PHP修改cron作業。 –

0

cron作業每分鐘有沒有意義!但你可以每小時做一個cron工作,因爲我認爲它不會計算一個小時的差異或兩個小時。沒有cron這是沒有任何其他的方式。這將需要大約2秒(最大)來完成,因此是值得