婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 深入解析PHP底層機制及相關原理

深入解析PHP底層機制及相關原理

熱門標簽:OMG地圖標注app 400電話鄭州申請 ai電話機器人加盟代理 地圖標注視頻廣告入駐 電銷機器人便宜的有嗎 黔江400電話如何辦理 中原區電話機器人價格 招標自動語音外呼系統 gps 地圖標注軟件

1、PHP是什么? 

PHP 指的是我們從外面看到的一套完整的系統。這聽起來有點糊涂,但其實并不復雜(PHP4 內部結構圖)。從功能上來分:我們可以分為三部分:

1、 解釋器部分(Zend 以引擎),負責對輸入代碼的分析、翻譯和執行;

2、 功能性部分(PHP功能函數以及擴展),負責具體實現語言的各種功能(比如它的函數等等);

3、 接口部分(SAPI),負責同 WEB 服務器的會話等功能。 Zend包括了第一部分的全部和第二部分的局部,PHP內核 包括了第二部分的局部和第三部分的全部。他們合起來稱之為 PHP 包。Zend 構成了語言的核心,同時也包含了一些最基本的 PHP 預定義函數的實現。PHP 包(內核)則包含了所有創造出語言本身各種顯著特性的模塊。 

               

                                                                                                    (PHP 內部結構圖)

 從內容模塊上來分:我們可以分為四層體系結構:

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

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

3)Sapi :Sapi全稱是Server Application Programming Interface,也就是服務端應用編程接口,sapi通過一系列鉤子函數,使得php可以和外圍交互數據,這是php非常優雅和成功的一個設計,通過sapi成功的將php本身和上層應用解耦隔離,php可以不再考慮如何針對不同應用進行兼容,而應用本身也可以針對自己的特點實現不同的處理方式。

4)上層應用: 這就是我們平時編寫的php程序,通過不同的sapi方式得到各種各樣的應用模式,如通過webserver實現web應用、在命令行下以腳本方式運行等等。

          

                                                                              (php結構 )

其架構思想:引擎(Zend)+擴展(ext)的模式:降低內部耦合

中間層(sapi):web server和php的通信接口, 隔絕web server和php。

如果php是一輛車,那么

車的框架就是php本身,即是我們外面看到一套完整系統。

Zend是車的引擎(發動機)

Ext下面的各種組件就是車的輪子

Sapi可以看做是公路,車可以跑在不同類型的公路上

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

因此,我們需要:性能優異的引擎+合適的車輪+正確的跑道

2、php生命周期

      查看:深入理解php底層:php生命周期 :http://blog.csdn.net/hguisu/article/details/7377520

3 、sapi

如前所述,sapi通過通過一系列的接口,使得外部應用可以和php交換數據并可以根據不同應用特點實現特定的處理方法,我們常見的一些sapi有:

1) 、apache2handler :這是以apache作為webserver,采用mod_php模式運行時候的處理方式,也是現在應用最廣泛的一種。

2)、cgi :這是webserver和php直接的另一種交互方式,也就是大名鼎鼎的fastcgi協議,在最近今年fastcgi+php得到越來越多的應用,也是異步webserver所唯一支持的方式。

3)、cli :命令行調用的應用模式

如圖:Sapi的簡單示意圖


 Sapi的定義及主要接口函數:

struct _sapi_module_struct { char *name; // 名字標識 char *pretty_name; // 更好理解的名字 int (*startup)(struct _sapi_module_struct *sapi_module); // 啟動函數 int (*shutdown)(struct _sapi_module_struct *sapi_module); // 關閉方法 int (*activate)(TSRMLS_D); //激活 int (*deactivate)(TSRMLS_D); // 停用 int (*ub_write)(const char *str, unsigned int str_length TSRMLS_DC); // 沒有緩存的寫操作(unbuffered write) void (*flush)(void *server_context); // flush struct stat *(*get_stat)(TSRMLS_D); // get uid char *(*getenv)(char *name, size_t name_len TSRMLS_DC); // getenv void (*sapi_error)(int type, const char *error_msg, ...); /* error handler */ int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers TSRMLS_DC); /* header handler */ /* send headers handler */ int (*send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC); void (*send_header)(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC); /* send header handler */ int (*read_post)(char *buffer, uint count_bytes TSRMLS_DC); /* read POST data */ char *(*read_cookies)(TSRMLS_D); /* read Cookies */ /* register server variables */ void (*register_server_variables)(zval *track_vars_array TSRMLS_DC); void (*log_message)(char *message); /* Log message */ time_t (*get_request_time)(TSRMLS_D); /* Request Time */ void (*terminate_process)(TSRMLS_D); /* Child Terminate */ char *php_ini_path_override; //覆蓋ini路徑 ... ...};

這里介紹一下其中一些主要函數

· startup:php被調用時初始化操作,比如cgi模式,在startup的時候會加載所有的extension并執行模塊初始化工作。

· shutdown:php關閉時收尾工作

· activate:請求初始化

· dectivate:請求結束時收尾工作

· ub_write:指定數據輸出方式,比如apache2handler方式,由于php作為apache的一個so存在,因此其輸出也就是調 用apache的ap_write函數,而在cgi模式下,會系統調用write。

·  sapi_error:錯誤處理函數

·  read_post:讀取post數據

·  register_server_variables:往$_SERVER中注冊環境變量這個一般根據不同協議標準注冊注冊的變量。

在php源碼中,sapi實現了很多接口:如下圖:


4、php腳本的執行

SAPI處于PHP架構的上層,而真正的腳本執行是有Zend引擎來完成。

目前語言分為兩類:

第一類:編譯型語言.如c/c++ java之類,他們的共性是運行之前必須對源代碼進行編譯,然后運行編譯后的目標文件。

第二類語言:解釋型語言:如PHP,Ruby,Python。他們需要解釋器來執行這些源代碼。實際上這些語言還是要經過編譯環節的。只不過他們在運行的時候進行編譯,為了效率,并不是每次執行的時候都會重新編譯,比如PHP的各種opcode緩存擴展(如APC Xcache等)。

說明:PHP從2000年發布的PHP4開始就不是解釋性語言。當一個PHP腳本被執行的時候,首先PHP源代碼由Zend引擎編譯成名為Zend opcodes的機器代碼。這些代碼保存在RAM中。然后執行opcodes運行真正的腳本。因此,PHP實際上和Java,C#等語言一樣是編譯語言。否則,它的執行會很慢。

我們來看PHP腳本是怎么被執行的。如hello.php:

?php$str = "Hello world!\n";echo $str;

命令行執行:php hello.php

輸出結果顯然是:Hello world!

但是執行腳本的時候,PHP/Zend做了什么呢?

4.1、程序的執行:

1)傳遞給php程序需要的執行文件hello.php,php程序完成基本的準備工作后啟動PHP及Zend引擎,加載注冊的擴展模塊。

2) 初始化完后讀取腳本文件,Zend引擎對腳本進行此詞法分析,語法分析,然后有Zend引擎編譯成opcode碼,最后執行 opcode碼。

php代碼的執行過程如下圖:

                           

php實現了一個典型的動態語言執行過程:拿到一段代碼后,經過詞法解析、語法解析等階段后,源程序會被翻譯成一個個指令(opcodes),然后ZEND虛擬機順次執行這些指令完成操作。PHP本身是用c實現的,因此最終調用的也都是c的函數,實際上,我們可以把php看做是一個c開發的軟件。

通過上面描述不難看出,php的執行的核心是翻譯出來的一條一條指令,也即opcode.

4.2、詞法分析和語法分析

解釋器一般包括兩部分:

1)、 讀取源程序,并處理語言結構

2)、處于語言結構并生成目標程序

而Lex和Yacc可以解決第一個問題。很多編程都有Lex/Yacc作為語言的詞法語法分析生成器,比如PHP,Python、Ruby已經MySql的sql語言。

Lex生成詞法分析器。

Yacc語法分析生成器

4. 3、opcode

PHP 構建在Zend虛擬機(Zend VM)之上的,PHP的opcode就是ZEND 虛擬機中的指令,即Opcode是php程序執行的最基本單位。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解PHP的執行原理和流程
  • 通過代碼實例解析PHP session工作原理
  • PHP數組實際占用內存大小原理解析
  • PHP超全局變量實現原理及代碼解析
  • PHP數組Key強制類型轉換實現原理解析
  • JS PHP字符串截取函數實現原理解析
  • PHP unset函數原理及使用方法解析
  • PHP 命名空間原理與用法詳解
  • 如何理解PHP程序執行的過程原理

標簽:那曲 哈密 日照 孝感 阿里 北京 濟源 池州

巨人網絡通訊聲明:本文標題《深入解析PHP底層機制及相關原理》,本文關鍵詞  深入,解析,PHP,底層,機制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《深入解析PHP底層機制及相關原理》相關的同類信息!
  • 本頁收集關于深入解析PHP底層機制及相關原理的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩一区高清| 久久久一区二区三区捆绑**| 911国产精品| 亚洲成人黄色影院| 欧美精品 日韩| 一区二区在线看| 91欧美激情一区二区三区成人| 亚洲国产精品传媒在线观看| 国产成人精品一区二| 国产精品网曝门| 91视频在线看| 亚洲自拍与偷拍| 宅男噜噜噜66一区二区66| 国产在线一区二区| 精品久久国产字幕高潮| 国产一区二区主播在线| 久久久久久一二三区| 国产成人亚洲综合a∨婷婷图片| 五月天中文字幕一区二区| 美国欧美日韩国产在线播放| 在线观看欧美黄色| 成人一区二区三区视频在线观看| 日韩精品一区二区三区在线播放| 国产自产v一区二区三区c| 亚洲国产精品二十页| 99精品桃花视频在线观看| 国产欧美一区二区三区沐欲| 成人不卡免费av| 亚洲一区二区在线免费观看视频| 欧美日本精品一区二区三区| 免费高清在线视频一区·| 国产精品无遮挡| 欧美性videosxxxxx| 精品一区二区三区在线观看| 亚洲欧美在线视频| 日韩欧美美女一区二区三区| 成人小视频在线| 亚洲主播在线观看| 国产视频一区二区在线观看| 欧美在线观看一区| 国产精品资源网| 性久久久久久久久| 国产日韩v精品一区二区| 欧美午夜精品电影| 国产风韵犹存在线视精品| 亚洲综合免费观看高清完整版在线| 精品sm捆绑视频| 717成人午夜免费福利电影| 国产精品12区| 久久草av在线| 亚洲国产一二三| 国产精品国产自产拍高清av | 精品一区二区三区欧美| 一区二区三区在线视频观看58| 国产调教视频一区| 欧美精品久久99久久在免费线| 成人av网在线| 国产一区999| 日本午夜精品视频在线观看 | 欧美变态tickling挠脚心| 94-欧美-setu| 99久久国产综合色|国产精品| 精品一区二区三区的国产在线播放| 日韩美女久久久| 久久久久国色av免费看影院| 精品少妇一区二区三区免费观看| 欧美午夜精品久久久| 97精品电影院| 成人中文字幕合集| 国产成人自拍网| 成人激情开心网| 国产激情视频一区二区在线观看 | 精品国产一区久久| 精品剧情在线观看| 欧美精品一区二区三区高清aⅴ | 成人av网站大全| 成人在线综合网站| 国产精品夜夜爽| 不卡视频在线看| 色综合色狠狠天天综合色| 色综合天天狠狠| 欧美美女bb生活片| 欧美成人性福生活免费看| 久久综合九色欧美综合狠狠 | 蜜桃一区二区三区在线观看| 男女男精品网站| 国产乱码精品一区二区三区av | 国产一区二区三区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美日韩高清一区| 欧美一级黄色录像| 精品蜜桃在线看| 国产精品激情偷乱一区二区∴| 亚洲女人小视频在线观看| 天天色 色综合| 国产成人高清在线| 欧美日韩色一区| 欧美不卡一区二区| 一区二区三区在线视频观看| 久久精品噜噜噜成人88aⅴ| 成人午夜电影网站| 欧美精品在线观看播放| 久久久久久电影| 亚洲成人一区在线| 成人免费黄色在线| 欧美丰满高潮xxxx喷水动漫| 国产色产综合产在线视频| 亚洲福利视频三区| 高清不卡一区二区| 日韩欧美国产精品| 亚洲欧美日韩国产另类专区| 精品一区二区三区日韩| 欧美综合视频在线观看| 国产欧美日韩在线视频| 日韩中文字幕91| 色婷婷av一区二区三区大白胸| 精品卡一卡二卡三卡四在线| 五月综合激情婷婷六月色窝| 99精品热视频| 久久精品视频免费| 美国av一区二区| 欧美日韩视频在线观看一区二区三区| 国产精品乱码妇女bbbb| 久久激情五月激情| 5858s免费视频成人| 亚洲免费资源在线播放| 国产成人8x视频一区二区| 欧美成人一区二区| 日本va欧美va欧美va精品| 色琪琪一区二区三区亚洲区| 亚洲国产精品成人久久综合一区| 久久成人羞羞网站| 日韩欧美在线影院| 五月天亚洲精品| 欧美日韩视频专区在线播放| 亚洲综合激情另类小说区| 色偷偷久久人人79超碰人人澡| 欧美国产一区视频在线观看| 极品美女销魂一区二区三区| 日韩一区二区免费电影| 奇米色一区二区| 欧美一区二区三区视频免费| 日本美女视频一区二区| 91精品国产综合久久精品性色| 亚洲一区在线免费观看| 欧洲精品在线观看| 亚洲国产色一区| 欧美日韩不卡在线| 日本午夜一区二区| 51久久夜色精品国产麻豆| 日韩在线一区二区三区| 日韩小视频在线观看专区| 久久电影网电视剧免费观看| 欧美精品一区二区三区视频| 国产一区二区精品在线观看| 久久综合色婷婷| eeuss鲁片一区二区三区在线看| 亚洲嫩草精品久久| 欧美日韩黄视频| 韩国精品免费视频| 中文字幕欧美三区| 色视频成人在线观看免| 亚洲va欧美va人人爽| 日韩一区二区在线看片| 国产成人无遮挡在线视频| 亚洲人成影院在线观看| 精品视频1区2区3区| 极品少妇xxxx精品少妇偷拍| 中文字幕在线一区| 欧美色倩网站大全免费| 久久99九九99精品| 亚洲欧美另类小说视频| 欧美一区二区在线观看| 不卡欧美aaaaa| 久久精品国产久精国产| 国产精品全国免费观看高清| 在线观看免费亚洲| 久久精品国产秦先生| 国产精品久久久久久久岛一牛影视| 欧美色图12p| 久久aⅴ国产欧美74aaa| 亚洲精品免费在线观看| 日韩精品一区二区三区三区免费| 一本大道久久精品懂色aⅴ| 国精品**一区二区三区在线蜜桃| 一区二区三区免费看视频| 久久综合精品国产一区二区三区| 色婷婷av一区二区三区之一色屋| 经典三级一区二区| 亚洲3atv精品一区二区三区| 中文字幕成人av| 欧美电影免费提供在线观看| 91成人免费在线视频| 国产福利一区二区三区| 亚洲午夜在线电影| 国产日本欧美一区二区| 91精品国产麻豆国产自产在线| 一本色道**综合亚洲精品蜜桃冫| 国产剧情在线观看一区二区| 美女视频黄 久久|