日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP內核探索 —— 如何執行PHP腳本:Zend引擎是如何解釋PHP腳本的

瀏覽:35日期:2022-09-16 13:06:00

前面介紹了PHP的生命周期,PHP的SAPI,SAPI處于PHP整個架構較上層,而真正腳本的執行主要由Zend引擎來完成, 這一小節我們介紹PHP腳本的執行。

目前編程語言可以分為兩大類:

第一類是像C/C++, .NET, Java之類的編譯型語言, 它們的共性是:運行之前必須對源代碼進行編譯,然后運行編譯后的目標文件。第二類比如PHP, Javascript, Ruby, Python這些解釋型語言, 他們都無需經過編譯即可“運行”。

雖然可以理解為直接運行,但它們并不是真的直接就被能被機器理解, 機器只能理解機器語言,那這些語言是怎么被執行的呢, 一般這些語言都需要一個解釋器, 由解釋器來執行這些源碼, 實際上這些語言還是會經過編譯環節,只不過它們一般會在運行的時候實時進行編譯。為了效率,并不是所有語言在每次執行的時候都會重新編譯一遍, 比如PHP的各種opcode緩存擴展(如APC, xcache, eAccelerator等),比如Python會將編譯的中間文件保存成pyc/pyo文件, 避免每次運行重新進行編譯所帶來的性能損失。

PHP的腳本的執行也需要一個解釋器, 比如命令行下的php程序,或者apache的mod_php模塊等等。 前面提到了PHP的SAPI接口, 下面就以PHP命令行程序為例解釋PHP腳本是怎么被執行的。 例如如下的這段PHP腳本:

<?php$str = 'Hello, world!n';echo $str;?>

假設上面的代碼保存在名為hello.php的文件中, 用PHP命令行程序執行這個腳本:

$ php ./hello.php

這段代碼的輸出顯然是Hello, world!, 那么在執行腳本的時候PHP/Zend都做了些什么呢? 這些語句是怎么樣讓php輸出這段話的呢? 下面將一步一步的進行介紹。

程序的執行如上例中, 傳遞給php程序需要執行的文件, php程序完成基本的準備工作后啟動PHP及Zend引擎, 加載注冊的擴展模塊。初始化完成后讀取腳本文件,Zend引擎對腳本文件進行詞法分析,語法分析。然后編譯成opcode執行。 如果安裝了apc之類的opcode緩存, 編譯環節可能會被跳過而直接從緩存中讀取opcode執行。

PHP在讀取到腳本文件后首先對代碼進行詞法分析,PHP的詞法分析器是通過lex生成的, 詞法規則文件在$PHP_SRC/Zend/zend_language_scanner.l, 這一階段lex會會將源代碼按照詞法規則切分一個一個的標記(token)。PHP中提供了一個函數token_get_all(), 該函數接收一個字符串參數, 返回一個按照詞法規則切分好的數組。 例如將上面的php代碼作為參數傳遞給這個函數:

<?php$code =<<<PHP_CODE<?php$str = 'Hello, worldn';echo $str;PHP_CODE;var_dump(token_get_all($code));?>

運行上面的腳本你將會看到一如下的輸出:

array ( 0 => array ( 0 => 368, // 腳本開始標記 1 => ’<?php // 匹配到的字符串’, 2 => 1, ), 1 => array ( 0 => 371, 1 => ’ ’, 2 => 2, ), 2 => ’=’, 3 => array ( 0 => 371, 1 => ’ ’, 2 => 2, ), 4 => array ( 0 => 315, 1 => ’'Hello, world'’, 2 => 2, ), 5 => ’;’, 6 => array ( 0 => 371, 1 => ’’, 2 => 3, ), 7 => array ( 0 => 316, 1 => ’echo’, 2 => 4, ), 8 => array ( 0 => 371, 1 => ’ ’, 2 => 4, ), 9 => ’;’,

這也是Zend引擎詞法分析做的事情,將代碼切分為一個個的標記,然后使用語法分析器(PHP使用bison生成語法分析器, 規則見$PHP_SRC/Zend/zend_language_parser。y), bison根據規則進行相應的處理, 如果代碼找不到匹配的規則,也就是語法錯誤時Zend引擎會停止,并輸出錯誤信息。 比如缺少括號,或者不符合語法規則的情況都會在這個環節檢查。 在匹配到相應的語法規則后,Zend引擎還會進行編譯, 將代碼編譯為opcode, 完成后,Zend引擎會執行這些opcode, 在執行opcode的過程中還有可能會繼續重復進行編譯-執行, 例如執行eval,include/require等語句, 因為這些語句還會包含或者執行其他文件或者字符串中的腳本。

例如上例中的echo語句會編譯為一條ZEND_ECHO指令, 執行過程中,該指令由C函數zend_print_variable(zval* z)執行,將傳遞進來的字符串打印出來。 為了方便理解, 本例中省去了一些細節,例如opcode指令和處理函數之間的映射關系等。 后面的章節將會詳細介紹。

如果想直接查看生成的Opcode,可以使用php的vld擴展查看。擴展下載地址:?http://pecl.php.net/package/vld。Win下需要自己編譯生成dll文件。

有關PHP腳本編譯執行的細節,請閱讀后面有關詞法分析,語法分析及opcode編譯相關內容。

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲乱码久久| 国产精品jk白丝蜜臀av小说| 国产日韩在线观看视频| 国产v综合v| 久久国产精品99国产| 亚洲aa在线| 日韩一区中文| 亚洲啊v在线免费视频| 久久av一区| 欧美日韩中文| 久久99视频| 成人亚洲精品| 亚洲97av| 在线一区视频观看| 美女在线视频一区| 狠狠干成人综合网| 麻豆一区二区三| 亚洲人成亚洲精品| 欧美xxxx中国| 亚洲va久久| jizzjizz中国精品麻豆| 欧美aa在线视频| 久久精品xxxxx| 欧美1区2区3| 高清不卡亚洲| 亚洲无线一线二线三线区别av| 久久精品av| 久久午夜精品| 日本va欧美va欧美va精品| 日本欧美韩国一区三区| 国产劲爆久久| 国产一区调教| 免费久久精品| 亚州av日韩av| 日本v片在线高清不卡在线观看| 日韩精品社区| 欧美三区四区| 99精品国产一区二区三区| 亚洲成人精选| 精品国产成人| 亚洲资源网站| 日韩精品专区| 国产精品久久久一区二区| 午夜欧美巨大性欧美巨大| 伊人国产精品| 日韩不卡免费高清视频| 日韩一区二区三区在线看| 婷婷视频一区二区三区| 亚洲伊人精品酒店| 国产精久久久| 影音先锋久久| 欧美片网站免费| 国产伦精品一区二区三区视频 | 日韩高清不卡在线| 日本在线不卡视频一二三区| 麻豆精品一区二区综合av| 麻豆国产91在线播放| 丰满少妇一区| 亚洲成人精选| 六月天综合网| 日本aⅴ亚洲精品中文乱码| 国产亚洲电影| 欧美日韩在线观看首页| 久久在线免费| 一级成人国产| 老司机精品视频在线播放| 最新国产精品视频| 日本欧美一区| 国产欧美日韩在线一区二区| 成人亚洲一区二区| 夜久久久久久| 欧洲av不卡| 日韩中文字幕| 亚洲综合精品| 久久99视频| 日韩精品a在线观看91| 久久先锋影音| 欧美伊人影院| 久久久久免费| 免费美女久久99| 欧美精品1区| 欧美黄色网页| 涩涩涩久久久成人精品| 日韩在线观看一区二区三区| 中文字幕亚洲精品乱码| 亚洲我射av| 你懂的国产精品| 日韩欧美一区二区三区在线观看| 男女精品网站| 国产日韩欧美中文在线| 日韩国产在线| 午夜亚洲福利| 中文字幕在线免费观看视频| 在线国产日韩| 欧美不卡高清一区二区三区| 视频一区视频二区在线观看| 国产欧美一区二区三区国产幕精品| 精品久久久中文字幕| 夜久久久久久| 国产91在线播放精品| 亚洲麻豆一区| 亚洲日本国产| 亚洲免费成人av在线| 国产精品mm| 午夜av成人| 精品国产美女a久久9999| xxxxx性欧美特大| 国产精品日本欧美一区二区三区| 亚洲精品成a人ⅴ香蕉片| 精品美女在线视频| 好看的亚洲午夜视频在线| 日韩专区视频网站| 国产福利片在线观看| 免费精品视频在线| 精品视频在线观看网站| 精品视频在线观看网站| 国产福利资源一区| 黄色欧美在线| 高清一区二区三区av| 国产精品啊v在线| 国产精品久久久久9999高清| 精品国产不卡| 亚洲欧美专区| 激情婷婷久久| 黄毛片在线观看| 国产精品久久久久毛片大屁完整版 | 日韩精品中文字幕吗一区二区| 久久国产亚洲| 国产精品精品国产一区二区| 久久精品av麻豆的观看方式| 亚洲一区二区三区免费在线观看| 精品国产精品国产偷麻豆| 69堂精品视频在线播放| 美女被久久久| 尤物网精品视频| 欧美一区二区三区久久精品| 日韩精品一级| 日韩另类视频| 久久免费国产| 国产欧美激情| 亚洲免费网址| 好看的亚洲午夜视频在线| 亚洲黄色免费av| 亚洲不卡av不卡一区二区| 国产精品亚洲产品| 国产精品亚洲欧美一级在线| 久久五月天小说| 开心激情综合| 新版的欧美在线视频| 亚洲第一精品影视| 国产三级精品三级在线观看国产| 久久久久久久欧美精品| 精品久久在线| 日韩高清一区在线| 91tv亚洲精品香蕉国产一区| 精品高清久久| 国产91在线播放精品| 精品国产18久久久久久二百| 另类小说一区二区三区| 美女久久99| 精品国产18久久久久久二百| 吉吉日韩欧美| 精品亚洲a∨一区二区三区18| 国产精品一级| 久久只有精品| 日韩动漫一区| 日韩精品欧美精品| 亚洲精品自拍| 丝瓜av网站精品一区二区 | 国产精品最新| 久久久91麻豆精品国产一区| 欧美成人基地 | 亚洲欧美日本视频在线观看| 首页亚洲欧美制服丝腿| 91精品尤物| 精品久久在线| 国产伦乱精品| 国产日韩一区| 五月天激情综合网| 国产自产自拍视频在线观看| 国产伊人久久| 亚洲综合电影| yellow在线观看网址| 在线精品亚洲| 亚洲黄色免费看| 在线一区视频观看| 国产精品一区二区三区美女 | 丝袜美腿亚洲一区二区图片| 精品一区三区| 香蕉久久久久久| 国产一区二区三区网| 一区在线视频观看| 日本免费在线视频不卡一不卡二| 老司机免费视频一区二区| 亚洲一级高清| 久久激五月天综合精品| 久久婷婷激情| 国产精品久久久久久久久久久久久久久| 999国产精品视频| 国产精品欧美三级在线观看|