2011-07-21 49 views
2

有沒有辦法讓PHP請求,其中用戶不必等待迴應?某種「後臺的php請求」?PHP請求「後臺」

例如,如果應用程序需要發送100封郵件,因爲用戶提交了什麼東西,我不想顯示「發送,請等待」這個用戶,但我想一些其他的腳本來完成這項工作獨立於用戶......

+0

谷歌爲「異步PHP」,並檢查http://stackoverflow.com/questions/124462/asynchronous-php-calls – dkretz

回答

6

選項:在一個數據庫(或文件)

  1. 棒和使用cron來輪詢它(最簡單的方式,你可能已經使用DB)。
  2. 使用類似RabbitMQØMQ我最喜歡的
  3. 產卵一個單獨的進程使用fork/exec不會建議)做到這一點。
  4. 正如其他人所建議的 - 通過使用Ajax請求僞造它。可行 - 但我覺得它很醜。
+0

+1爲RabbitMQ –

3

你也許可以通過這種方式發送Ajax請求到UI不會凍結,任務將在服務器上執行?

+0

如果用戶離開頁面在此期間?無論如何,劇本會被執行嗎? – domagojk

+0

@ domagoj412 - 是的。如果請求到達了Web服務器,它將工作。用戶將不會得到迴應。 –

+0

就像Emil說的那樣,如果請求發送到服務器,無論客戶端如何,服務器都不會停止,但客戶端將不會收到來自服務器的任何文本的通知。應該做這個工作,並且不要求你配置其他隊列消息系統。 –

1

你可以通過ajax發送請求,然後在其他地方成功將用戶重定向。服務器腳本仍將處理,但不會向用戶發送確認。

0
exec('php script.php > /dev/null & echo $!', $o); 

您也可以使用php-cli而不是php。上述 該命令返回$問題o [0]後臺腳本的進程ID,因此您可以設置的東西了AJAX或somethig輪詢,如果你想顯示它是進步的用戶。

0

創建一個PHP程序做的發送郵件的實際工作,並利用該技術described here通過HTTP GET調用它。