2015-01-04 73 views
-1

我需要在後臺線程中創建一個應用程序,包含一個定時器,不斷更新數據庫(通過從不同的網站收集數據),沒有任何用戶干擾。我的意思是:沒有任何人訪問該網站,線程必須不斷更新數據庫。這是可能的PHP中,我怎麼能意識到這一點?在PHP中創建後臺線程,保持運行無需用戶交互

+0

使用cron文件(crontab)。去谷歌上查詢。 – worldofjr

+0

你在什麼操作系統上?你使用的是哪個數據庫?您希望執行的更新的性質是什麼?多久? – halfer

回答

3

我認爲這是創建一個php腳本來做任何你想要的,然後設置一個cron作業來在特定時間運行該腳本的最佳方式。

+0

yes.good解決方案。 – sandipon

+0

我認爲codey55用於從web服務器運行PHP腳本,因此也是一個問題。就像補充一樣,這是通過使用PHP作爲命令行來實現的http://php.net/manual/en/features.commandline.php – maskie

2

這有幾種選擇:

  • 計劃的任務在你的操作系統,如Unix或者Windows計劃針對Windows平臺的cron。
  • 永久運行的腳本。但是,這對於PHP來說並不理想,因爲內存使用有時不會被正確丟棄,而且腳本可能會耗盡內存。腳本被設置爲死亡和重生是很常見的,以防止這種情況發生。
  • 數據庫服務器中的計劃任務。 MySQL現在支持這個。如果您的目的是運行數據庫更新,那麼這可能是一個不錯的選擇,如果您正在運行MySQL,並且您的版本足夠新。
  • 一個隊列,其中一些處理是在請求信號後在後臺完成的。參見Gearman,Resque和其他許多人。用戶在Web應用程序中請求某些內容時非常有用,但該請求太長而無法立即執行。如果你需要永久運行的東西,那麼這可能不太理想 - 爲了完整性,我添加它。
1

長時間運行PHP進程並不是一個好主意,因爲PHP不是一種非常有效的內存語言,PHP進程會消耗大量內存。

這將是更好的使用工作經理。看看Gearman

+0

PHP進程不應該長時間運行的建議不是關於內存它是有效的 - 傳統上垃圾收集器並不總是釋放不再使用的內存(否則稱爲「內存泄漏」)。不過,我相信這在更新版本的PHP中會好得多。 – halfer

+0

是的,但是如果你需要一起運行很多後臺進程呢?當然,你會希望每個人都消耗一定量的內存,不是嗎? – Dodu

+1

嘿,當然。我只是指出,你推薦對付長時間運行的PHP任務的原因並不是避免它們的主要原因。 – halfer