2008-11-25 80 views
7

我正在寫一個簡單的PHP應用程序,它需要偶爾執行一套相當密集的MySQL更新。我不特別希望這會導致用戶延遲,所以我想知道使用pcntl_fork()。在PHP/Apache中分流是一個好主意嗎?

我不確定這是如何真正起作用的:雖然父進程完成後子進程會繼續運行嗎?父進程是否會結束,並且在子進程完成之前用戶的頁面加載完全?

換句話說,這是一種安全的方式來讓PHP腳本(在Apache下運行)在不延遲用戶的情況下執行一些耗時的更新,還是應該讓用戶忍受一些延遲?

+0

請在問題標題中說清楚你的意思是分叉一個過程。我首先想到你想分解這個項目。 – 2008-11-25 15:36:35

回答

3

父進程將結束,用戶的頁面將全部加載,子進程將繼續,並且使用將不會反饋子進程是否成功完成。

1

有人可能會詳細告訴你,當你在apache下調用這個函數時會發生什麼,但是根據你正在使用的apache和php的版本和組合,你可能會得到並非總是真的答案。你應該使用ajax並有兩個請求。迴應一次,在頁面上顯示你在做什麼,然後用ajax調用輪詢第二次請求狀態以及你實際工作的地方。

0

如果PHP在Apache下運行,因爲mod_php模塊分支根本不起作用,您會收到一條警告,提示函數* pcntl_fork()*未定義。在這種情況下,一個好的解決方案是使用exec(),而不是使用命令行運行單獨的php作業。

0

我認爲這是一個壞主意。我做了類似的事情,並且Apache將父母的輸出重定向到了它的孩子。那就是你的瀏覽器顯示來自其中一個子進程的信息。
點擊獲得更多信息this
希望它對你有所幫助。

相關問題