PHP底層工做原理

1、簡介

PHP總共有三個模塊:內核、Zend引擎、以及擴展層php

  1. PHP內核用來處理請求、文件流、錯誤處理等相關操做
  2. Zend引擎(ZE)用以將源文件轉換成機器語言,而後在虛擬機上運行它
  3. 擴展層是一組函數、類庫和流,PHP使用它們來執行一些特定的操做。好比,咱們須要mysql擴展來鏈接MySQL數據庫
當ZE執行程序時可能會須要鏈接若干擴展,這時ZE將控制權交給擴展,等處理完特定任務後再返還;
最後,ZE將程序運行結果返回給PHP內核,它再將結果傳送給SAPI層,最終輸出到瀏覽器上。

2、架構圖

clipboard.png

從圖上能夠看出,php從下到上是一個4層體系mysql

2.1 Zend引擎

Zend總體用純c實現,是php的內核部分,它將php代碼翻譯(詞法、語法解析等一系列編譯過程)爲可執行opcode的處理並實現相應的處理方法、實現了基本的數據結構(如hashtable、oo)、內存分配及管理、提供了相應的api方法供外部調用,是一切的核心,全部的外圍功能均圍繞zend實現。linux

2.2 Extensions

圍繞着zend引擎,extensions經過組件式的方式提供各類基礎服務,咱們常見的各類內置函數(如array系列)、標準庫等都是經過extension來實現,用戶也能夠根據須要實現本身的extension以達到功能擴展、性能優化等目的(如貼吧正在使用的php中間層、富文本解析就是extension的典型應用)。web

2.3 Sapi

Sapi全稱是Server Application Programming Interface,也就是服務端應用編程接口,sapi經過一系列鉤子函數,使得php能夠和外圍交互數據,這是php很是優雅和成功的一個設計,經過sapi成功的將php自己和上層應用解耦隔離,php能夠再也不考慮如何針對不一樣應用進行兼容,而應用自己也能夠針對本身的特色實現不一樣的處理方式。後面將在sapi章節中介紹sql

2.4 上層應用

這就是咱們平時編寫的php程序,經過不一樣的sapi方式獲得各類各樣的應用模式,如經過webserver實現web應用、在命令行下以腳本方式運行等等。數據庫

2.5 構架思想

引擎(Zend)+組件(ext)的模式下降內部耦合apache

中間層(sapi)隔絕web server和php編程


若是php是一輛車,那麼車的框架就是php自己

Zend是車的引擎(發動機)api

Ext下面的各類組件就是車的輪子瀏覽器

Sapi能夠看作是公路,車能夠跑在不一樣類型的公路上

而一次php程序的執行就是汽車跑在公路上。

所以,咱們須要:性能優異的引擎+合適的車輪+正確的跑道

3、LAMP架構

clipboard.png

從下往上四層:

  1. liunx 屬於操做系統的底層
  2. apache服務器,屬於次服務器,溝通linux和PHP
  3. php:屬於服務端編程語言,經過php_module 模塊 和apache關聯
  4. MySQL和其餘web服務:屬於應用服務,經過PHP的Extensions外掛模塊和mysql關聯

參考文檔:PHP底層工做原理

相關文章
相關標籤/搜索