好的,請原諒我,如果這是另一個問題的重複,但搜索後我還沒有找到明確的答案。我基本上想要做的是讓我的PHP Web應用程序觸發一些事件(如電子郵件或報告生成器),可能需要幾分鐘才能完成並立即將控制權返回給頁面。我來自.NET世界,可以很容易地通過線程來完成。在長時間運行的過程中在php中創建後臺進程
因此,這裏的工作流程:
- 用戶點擊「生成報告」按鈕
- Ajax調用「../blah/generate-report」造,並立即返回
- 進程已啓動並運行直到完成,而用戶可以然後去他的生意
- 用戶可以返回到報告頁面,看到進步:「報告完成了50%」
完成此操作的最佳方法是什麼?簡單的答案很好。我不想爲我寫的代碼,只是一些指導。我看着shell_exec,但我不確定這是否是最好的方式,或者如果是,如何使用它來處理Web應用程序中的功能。 (如果這有什麼區別,我使用Yii框架)。謝謝。
-Jason
PHP是單線程的。如果你有過程控制擴展,你可以產生額外的PHP進程,但它們不是線程,也就是說。或者,您可以'exec('/ usr/bin/php name_of_script.php')' – GordonM
爲了糾正上面的註釋,存在pthreads擴展,它向開發者公開了線程功能。但是,即使如此,您仍然無法爲HTML服務並執行後臺任務,因爲Web服務器進程會一直掛起直到PHP進程完成,並且只有在所有線程都完成後纔會完成。你正在尋找的是實現一個作業服務器或任務場。 Gearman想到並可能會有所幫助。您可以使用Web請求填充不同進程的隊列。然後執行另一個HTTP請求來查詢作業狀態。 –
另一個意見,糾正我自己的:)如果你有興趣有任何機會使用線程,你可以檢查出我將鏈接[這個例子]的存儲庫(https://github.com/krakjoe/pthreads /blob/master/examples/SimpleWebRequest.php),它顯示瞭如何執行一個異步請求,如果這樣可以解決你的問題(雖然Drew提供的答案可以用較少的麻煩來處理這個任務)。 –