要執行十幾分鐘的PHP腳本就不要在PHP-FPM裡跑了。
1. 建議執行在PHP-FPM中的PHP腳本用pclose(popen())無阻塞開啟一個PHP-CLI程序執行你的腳本。
2. 執行完成後把訊息插入資料庫。
3. 前台透過AJAX定時輪詢進行訊息通知(類似知乎的訊息通知一樣)。
如果你一定要在PHP-FPM中跑這個耗時很長的腳本也不是不行。
首先你需要設定Nginx把這個腳本轉送給一個預先設定好的獨立的PHP-FPM動態進程池(不同的PHP-FPM進程池監聽不同的連接埠)來處理,這樣該腳本的執行不會影響到其他PHP-FPM進程池。而且動態進程池(pm = dynamic)能夠動態fork出更多的進程來處理腳本,代價就是記憶體消耗多點,這時你最好配置一個最大進程數(pm.max_children = 20)。
如果你想讓PHP-FPM結束HTTP請求後繼續處理業務,可以用fastcgi_finish_request()這個PHP-FPM提供的函數。
推薦:《PHP教學》
#以上是php運行過長導致不回應其他請求的詳細內容。更多資訊請關注PHP中文網其他相關文章!