PHP底層探索 三 一次請求生命週期

2021-07-22 16:13:31 字數 900 閱讀 4052

我們從未手動開啟過php的相關程序,它是隨著apache的啟動而永興的.php通過mod_php5.so模組和apache相連(具體說是sapi)

php總共有三個模組:核心 zend引擎 擴充套件層

比如,我們需要mysql擴充套件來來接mysql資料庫;當ze執行程式時,可能會需要連線若干擴充套件,這時ze將程式執行結果返回給php核心,它再將結果傳送給sapi層,最終回饋給瀏覽器;

深入**

apache啟動後,php解釋程式也隨之啟動.php的啟動過程有兩部:

php啟動第一步

第一步的操作在任何請求到達之前就發生了.啟動apache後,php解釋程式也隨之啟動.php呼叫各個程式的初始化(minit)方法.從而使這些擴充套件切換到可用狀態;

php啟動第二步php關閉第一步

如同php啟動一樣,php的關閉也分兩部,一旦頁面執行完畢(無論是執行到了末尾還是exit(),die()函式終止),php就會啟動清理程式.他會按順序呼叫各個模組的rshutdown方法.清楚程式執行時生成的符號表,也就是對每個變數進行ubset()函式.

php關閉第二步

最後,所有的請求都已經處理完畢,sapi也準備關閉了,php開始執行第二步,php呼叫每個擴充套件的mshutdown方法,這是最後一次釋放記憶體的機會;

這樣,整個php生命週期就結束了.要注意的是,只有在伺服器沒有請求的情況下,才會執行』啟動第一步』,和『關閉第二步』

Extjs 點選一次button觸發多次請求

事件觸發兩次的三種原因 1.容器的多次初始化 隱蔽級別 錯誤表現為在 中將乙個容器初始化了兩次,例如 此行 乍一看是正常的獲取乙個控制器然後初始化,其實getcontroller方法已經將控制器初始化了,這時再呼叫init 方法就會註冊兩次,一般犯了一次這樣的錯誤,看了原始碼以後就不會再犯了,畢竟每...

記一次併發和事務探索過程

1 事務的相關概念和整合過程就不在這裡重複,可看本人另一篇 2 這次主要是探索併發中資料的問題,場景是電商系統下單減庫存,mysql,暫沒涉及分布式和集群 3 所有測試我們先預設原商品庫存為100,且我們通過使用者不同來指定休眠更好的看效果,admin為休眠的使用者它下單1個商品,另乙個請求下單3個...

演算法探索 只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1 示例 2 輸入 4,1,2,1,2 輸出 4 主流思路分三種 1.利用set,2.排序後比...