2012-12-10 86 views
7

我目前正試圖從可用的內容生成demenad上的epub。 不幸的是,當epub的內容很多時,http請求完成需要一段時間(有些情況下需要10分鐘) - 這並不理想PHP - 長時間運行的後臺任務

我想遵循類似於Safari的方法 - 當文件可生成一個EPUB和向用戶發送電子郵件

我的問題是 - 什麼是在PHP中運行一個後臺任務/線程可能需要很長一段時間的最佳方式來完成

+1

請注意,如果您位於共享網絡主機上,則主機可能不允許腳本長時間執行。因此,您可能需要將工作分解(如果可能)。 –

回答

16

對於長時間運行的PHP進程,您需要小心謹慎,因爲對於一個PHP來說內存效率不高(例如PHP中只有100個int的數組可能會消耗多達15KB的內存)。對於99%的用例來說,這通常很好,因爲大多數人只是使用PHP來訪問網站,而且這些進程只運行幾分之一秒,所以內存因速度而犧牲了。但是,對於一個長期運行的過程(特別是如果你有很多這樣的過程),這可能不是你最好的解決方案。

您還希望非常小心地在PHP中調用exec/shell_exec類似函數,因爲它們在內部實現爲流(即它們可能會導致父進程中的阻塞,因爲它通常必須等待流返回數據)。

背景任務的一個選項是使用fork。不過,我強烈建議使用像gearman(也參見php extensions)或像amqpzmq這樣的隊列的正確工作管理器,以更清楚地處理這些任務。哪一個更適合你的用例,我會讓你決定。

1

可以運行命令

$command = 'nohup >/dev/null 2>&1 /your/background/script.php &'