2011-03-09 14 views
2

我有一個郵件腳本循環約900個訂戶(數據庫中),爲每個訂戶建立一個單獨的電子郵件,並通過SMTP發送。該腳本通過瀏覽器手動觸發,但涉及的記錄數量導致腳本開始超時。在測試中,錯誤幾乎總是致命錯誤超過最大執行時間(儘管一次出現與mail()和SMTP相關的錯誤)。我想我應該從命令行運行這種類型的腳本,但是,腳本仍然需要手動觸發(通過CMS管理員用戶) - 有沒有人有任何建議,以處理這個問題的好方法?最有效的方式來執行PHP郵件腳本循環通過100個記錄

+0

在後臺運行它作爲分叉進程具有較長的最大執行時間。 – 2011-03-09 12:39:56

回答

1

我想你可以在腳本中設置PHP腳本的超時時間。

但是,我寧願使用基於CRON + PHP-CLI的解決方案。無論您使用CGI還是CLI,PHP代碼都保持不變,但是,在CLI模式下,不存在隱式時間限制。

+0

如果這應該手動執行,CRON作業不會有多大幫助。 – Ivan 2011-03-09 12:44:39

+0

在這種情況下,您可以在用戶完成手動部分(例如選擇收件人)後「分叉」php-cli。請參閱[在Linux上從PHP運行後臺進程](http://911-need-code-help.blogspot.com/2010/04/running-background-process-in-php.html) – 2011-03-09 12:48:48

+0

這是!你手動創建一個「tasklist」,cronjob每2分鐘觸發一次,併發送列表中的前10個郵件(數字隨機) – Flo 2011-03-09 12:48:49

0

set_time_limit(0);應該做的伎倆。

沒有太多的話要說,更有效的方式,除非我們看到你的代碼....

0

cronjobs每一次工作的cron執行腳本可以發送郵件的量小。

例如,Typo3 mailer engine每5分鐘調用一次,並檢查是否需要發送郵件。

因此,用戶不會手動觸發郵件腳本。用戶只標記郵件引擎應發送的通訊。

1

調整運行時間限制只會暫時延遲問題。

你沒有說明這個操作系統是什麼 - 當然如果你有一個本地的MTA可能會有所幫助,但是正確的解決方案是產生一個獨立的進程。請注意,這種方法存在一些缺陷 - 有關如何在Unix類型系統上正確執行此操作的詳細信息,請參見this post

+0

謝謝,我正在運行CentOS,因此這個鏈接非常有用。我只是想弄清楚如何觸發現有的守護進程來啓動郵件腳本,例如,如何在apache處理的初始用戶輸入之後執行此命令 - >打印'echo/usr/bin/php -q郵件程序。 php |現在'; – tferdo 2011-03-09 14:54:22

相關問題