PHP在web方式中如何改了檔案就立即生效的,重要的幾個概念:
● sapi: 可以簡單的理解為php引擎對外的一個統一介面,使得php可以和外部程式進行互動
● php的生命週期中關鍵四個呼叫: MINT -> RINT -> RSHUTDOWN -> MSHUTDOWN
● fpm: fastcgi進程管理器
fpm方式的流程就是:
fpm通過sapi介面與php進程互動
1.fpm啟動會呼叫各擴充套件的MINT方法,進行一些資料初始化(長駐記憶體)
2.每個請求過來,先會執行RINT對單個請求行一個初始化
3.執行php指令碼(在沒有快取opcode的情況下,這裡的php指令碼是動態執行的,所以更新php指令碼後,會執行新的php指令碼,詳情不在這裡敘述)
4.執行RSHUTDOWN方法
5.如果你要停止fpm了,才會執行MSHUTDOWN
fpm對每個請求的處理都是一直在在重複執行 2~4步,在第三步中,php的指令碼是動態執行的,由於每次都要執行一次php指令碼,而每次php指令碼都要有一個把php檔案翻譯成opcode的流程(比較耗時), 於是就產生的opcache工具。
opcache
直接把php翻譯後的opcode程式碼樹儲存到共用記憶體中,以便直接使用,從而減少每次都把php翻譯成opcode的開銷。
opcache的問題: 按照他的描述,修改了php檔案,並不能立即被更新。
opcache的解決方案: 有一個設定來設定隔多長時間檢測檔案是否更新了,從而有機會在第二步重新來reload相關的檔案。
當然,直接reload fpm,從而達到php熱更新的效果(opcache擴充套件可以在第四步把相關的opcode cache給清空)。
圖示
以上就是PHP生命週期及fpm的運作方式的詳細內容,更多請關注TW511.COM其它相關文章!