PHP學習系列 -- 源碼目錄結構學習____PHP

來源:互聯網
上載者:User

通過上一篇文章的學習,我們已經對PHP的知識有了一個大概的瞭解,比如PHP是開源、免費、適合Web開發的服務端指令碼語言,適合進行Web網站的開發,PHP是解釋型語言,由Zend 引擎進行PHP語言的解析。本篇文章我們就接著上一篇文章的內容接著向下學習,通過查看PHP語言的源碼結構瞭解Zend,isapi、PHP擴充的相關知識。

PHP源碼下載地址:下載  選擇一個版本下載即可。PHP源碼結構如下所示。


目錄結構分析:

/    :主要包含一些說明檔案以及設計方案。Zend :Zend 引擎的實現目錄。包括詞法文法解析,OPCODE,提供語言運行環境。TSRM :安全執行緒資源管理員。build:放置一些和源碼編譯相關的一些檔案。ext  :官方擴充目錄。包括array系列,pdo系列,spl系列等函數的實現。main :最為核心的檔案,實現PHP的基本設施。pear :PHP 擴充與應用倉庫。sapi :各種伺服器抽象層的代碼。例如apache的mod_php,cgi,fastcgi以及fpm等等介面。tests:PHP的測試指令碼集合。scripts:Linux 下的指令碼目錄。win32:Windows平台相關的一些實現。

這裡重點說一下Zend、ext、sapi三個目錄。 Zend

這裡再累述一下Zend引擎到底是什麼,又在PHP語言中扮演了什麼角色。 

Zend Engine功能

先進性先行編譯(Compile),然後再執行(Execute)。

(1)詞法分析:將代碼切分為一個個的標記Toekn。

(2)文法分析(Parser):語法檢查。

(3)產生作業碼(opcode):Zend 引擎對這些 Token 進行編譯, 將代碼編譯為 opcode,並綁定相應的參數、和函數調用。

(4)執行(execute):Zend 引擎執行這些 opcode。

(5)記憶體管理

可以說,Zend 就是PHP的心臟,是它保證了PHP可以穩定、高效的運行。 ext

PHP 3.0以前的版本,代碼的耦合性太強,導致擴充很困難,在PHP 3.0以後的版本將PHP的功能進行了拆分,部分功能由相應的擴充來實現。

開啟該檔案夾,我們可以看到pdo、mysql、curl、dom、date等多個擴充。PHP擴充的這種架構極大降低了開發人員的開發成本、提高了擴充的靈活性。比如,我們想要使用通過PHP連結Mysql服務時,只需要通過mysql提供的函數操作即可。至於mysql擴充內部是如何通過socket通訊與Mysql服務建立聯絡以及互動的,這些我們統統不用關心,是不是很簡便。

至於擴充的添加以及擴充在Windows/Linux平台的差別,上一篇文章已經說過了,不再累述。 sapi

sapi:Server Application Programming Interface,服務端應用編程連接埠。上面我們已經說了PHP是如何執行的,那麼PHP又是如何被訪問告知要被執行的呢。沒錯,sapi就是起這個作用的。

常見的調用 SAPI 方式有以下四種:

(1)mod_php5:PHP module for Apache。

(2)CGI:Fork-And-Execute。

(3)Fastcgi:常駐 (Long-Live) 型的 CGI。

(4)CLI:PHP 命令列模式。

大的來分,上面四種模式可以分為兩大類:Web Server轉寄模式、命令列模式

第一、二、三屬於Web Server轉寄模式,第四種模式屬於命令列模式。 

細分一下,四種模式又可以拆分三種:擴充模式、cgi模式、cli模式

第一種屬於擴充模式。Apache伺服器將php模組作為其擴充,當Apache伺服器接收到.php類型的請求時,會將請求分發給mod_php模組去處理,總的來說,這種模式對於高並發並不適用(至於為何不行後期會完善),但是處理效率還是可以的。

第二、三種都屬於CGI模式。這個時候,當Nginx、lighttpd等Web Server接收到.php檔案請求時,會通過cgi介面將請求分發給Zend去解析,最終返回。這種模式目前應用比較廣泛。

第三種屬於CLI模式。顧名思義,就是可以在命令列下執行.php檔案,這種方式不需要進行Web Server的轉寄。目前這種模式在很多地方都受限,應用並不廣泛。

OK,最後附上一張PHP體繫結構圖


參考文章:Zend Engine & PHP

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.