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

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

PHP內核探索 —— 解釋器的執行過程:引擎是如何執行PHP代碼的

瀏覽:138日期:2022-09-16 13:33:39

這里將介紹引擎內部執行一個PHP腳本的流程,以CLI SAPI為例子來對流程中核心的部分做簡單介紹,省去一些初始化及清理操作。

CLI(Command Line Interface)即PHP的命令行模式,現在此SAPI是默認安裝的,我們在服務器上安裝完PHP之后,一般會生成一個可執行文件,假設此文件為/usr/local/bin/php?,那么我們在SHELL下可以用以下命令來執行一個PHP腳本:

/usr/local/bin/php -f test.php

這個命令將執行當前目錄下的test.php腳本,我們暫且不關心test.php具體內容,只關心一下這個執行的內部過程是怎么樣的。

CLI的主源代碼文件在{PHPSRC}/sapi/cli/php_cli.c,整個過程就從這個文件中的 main()函數執行,整個函數比較長,主要可以分為以下幾個階段:

解析命令行參數初始化環境編譯執行PHP代碼清理環境并返回退出

在第1個階段中,解析-f參數為執行一個PHP文件,-f后面的test.php就是需要被執行的文件。

這里我們將關注第3個階段,如何執行test.php中的PHP代碼。

最終是通過php_execute_script(&file_handle TSRMLS_CC)來執行PHP的腳本,這個函數定義在{PHPSRC}/main/main.c,原型為

PHPAPI int php_execute_script(zend_file_handle *primary_file TSRMLS_DC)

file_handle的類型為zend_file_handle,這個是zend對文件句柄的一個封裝,里面的內容就是和test.php相關的了。

php_execute_script最終是調用的zend_execute_scripts,這個函數定義在{PHPSRC}/Zend/zend.c,原型為:

ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_count, ...)

此函數具有可變參數,可以一次執行多個PHP文件,在此函數中最核心的是調用zend_compile_file和zend_execute,zend_compile_file是一個函數指針,其聲明在{PHPSRC}/Zend/zend_compile.c:

ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type TSRMLS_DC);

在引擎初始化的時候,會將compile_file函數的地址賦值給zend_compile_file,compile_file函數定義在{PHPSRC}/Zend/zend_language_scanner.c,通過聲明可以看到這個函數以zend_file_handle指針作為參數,返回一個指向zend_op_array的指針。

zend_execute也是一個函數指針,其聲明在{PHPSRC}/Zend/zend_execute.c:

ZEND_API extern void (*zend_execute)(zend_op_array *op_array TSRMLS_DC);

同樣在引擎初始化的時候,會將execute函數的地址賦值給zend_execute,execute的定義在{PHPSRC}/Zend/zend_vm_execute.h。

通過聲明知道zend_execute以一個指向zend_op_array結構的指針作為參數,這個指針即前面zend_compile_file的返回值,zend_execute就開始執行op_array中的opcode,在執行opcode的過程中,就實現了PHP語言的各種功能。

到這里主要的執行工作基本就完成。

PS:為什么要把zend_execute和zend_compile_file定義為函數指針?

在引擎初始化(zend_startup)的時候,將zend_execute指向了默認的execute,zend_compile_file指向了默認的compile_file。我們可以在實際編譯和執行之前將zend_execute和zend_compile_file重寫為其他的編譯和執行函數,這樣就為我們擴展引擎留下了鉤子,比如一個比較有名的查看PHP的opcode的擴展vld(http://www.derickrethans.nl/projects.html#vld),此擴展就是在每次請求初始化的鉤子函數(PHP_RINIT_FUNCTION)中,將zend_execute和zend_compile_file替換成自己的vld_execute和vld_compile_file,這兩個函數其實是對原始函數進行了封裝,添加了輸出opcode信息的附加功能,因為引擎初始化是發生在模塊請求初始化之前,而模塊請求初始化又是在編譯和執行之前,所以這樣的覆蓋能達到目的。

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜欧美精品| 国产精品a级| 亚洲性色av| 色网在线免费观看| 樱桃视频成人在线观看| 中文字幕人成乱码在线观看| 国产999精品在线观看| 国产欧美激情| 麻豆精品久久久| 都市激情国产精品| 91精品久久久久久久久久不卡| 蜜臀久久精品| 亚洲午夜久久久久久尤物| 激情婷婷综合| 亚洲精品在线国产| 欧美国产三级| 三上亚洲一区二区| 99久久九九| 水蜜桃久久夜色精品一区的特点| 综合在线一区| 麻豆中文一区二区| 亚洲精品88| 精品在线99| 亚洲aa在线| 另类综合日韩欧美亚洲| 97精品视频在线看| 欧美成人综合| 中文无码久久精品| 欧美日韩伊人| 亚洲国产福利| 亚洲中午字幕| 国产精品久久久久久久久免费高清 | 久久不见久久见免费视频7 | 99精品小视频| 亚洲精品美女| 久久久久九九精品影院| 99精品网站| 少妇精品久久久一区二区| 国产精品毛片久久久| 日韩精品免费一区二区三区| 亚洲日本久久| 中文字幕高清在线播放| 在线观看视频免费一区二区三区| 91免费精品国偷自产在线在线| 狂野欧美性猛交xxxx| 欧美综合另类| 日韩国产高清在线| 精品捆绑调教一区二区三区| 日韩影院免费视频| 老牛国内精品亚洲成av人片| 日韩亚洲国产欧美| 久久婷婷国产| 蜜臀av亚洲一区中文字幕| 久久免费福利| 在线视频精品| 精品亚洲自拍| 亚洲丝袜美腿一区| 欧美成人精品三级网站| 中文不卡在线| 不卡一二三区| 青青草91久久久久久久久| 99精品视频在线| 国产精品日韩精品中文字幕| 国模 一区 二区 三区| 国产精品三级| 亚洲涩涩av| 99视频精品全国免费| 久久三级中文| 日韩精品社区| 亚洲性图久久| 麻豆久久一区二区| 亚洲欧美网站在线观看| 亚洲91视频| 久久久国产精品网站| 免费的成人av| 欧洲亚洲一区二区三区| 国产欧美一级| 亚洲三级视频| 黄色欧美日韩| 日韩欧美少妇| 精品国产亚洲一区二区在线观看| 一区二区日韩免费看| 极品日韩av| 中文字幕在线视频久| 嫩草伊人久久精品少妇av杨幂| 最新国产精品久久久| 黄色国产精品| 成人羞羞视频在线看网址| 国产美女撒尿一区二区| 日韩中文字幕麻豆| 免费毛片在线不卡| 日韩高清中文字幕一区二区| 精品视频一区二区三区在线观看 | 亚洲成人av观看| 国产一区二区三区久久久久久久久| 日本不卡不码高清免费观看| 日韩亚洲在线| 蜜臀91精品国产高清在线观看| 岛国精品一区| 国产精品三级| 婷婷综合一区| 日韩一区精品视频| 欧美.日韩.国产.一区.二区 | 久久精品毛片| 国产乱人伦丫前精品视频| 免费黄网站欧美| 99国产精品久久久久久久| 久久精品播放| 亚洲不卡av不卡一区二区| 久久精品人人| 久久99久久人婷婷精品综合| 国产精品视频一区视频二区| 青青青国产精品| 人人爱人人干婷婷丁香亚洲| 深夜福利一区| 婷婷五月色综合香五月| 亚洲毛片视频| 日韩中文字幕无砖| 日本亚洲欧美天堂免费| 亚洲欧美日本国产| 日韩欧美在线精品| 久久激情av| 清纯唯美亚洲综合一区| 日本欧美韩国一区三区| 中文字幕免费一区二区| 亚洲欧美专区| 日韩高清电影免费| 欧美中文高清| 美女av一区| 91亚洲国产成人久久精品| 日韩伦理在线一区| 久久精品主播| 亚洲欧洲一区二区天堂久久| 丝袜美腿亚洲一区二区图片| 亚洲小说春色综合另类电影| 日韩成人午夜精品| 国产精品久久久亚洲一区| 久久av网址| 国产在线不卡一区二区三区| 久久影院午夜精品| 久久亚洲在线| 99日韩精品| 亚洲精品精选| 麻豆一区在线| 日韩免费在线| 在线亚洲一区| 日韩激情网站| 麻豆国产一区| 久久久夜夜夜| 久久99伊人| 久久精品97| 日韩电影在线视频| 午夜宅男久久久| 日韩区欧美区| 国产精品一二| sm捆绑调教国产免费网站在线观看| 丝袜av一区| 一级欧美视频| 精品精品国产三级a∨在线| 99久久夜色精品国产亚洲狼 | 欧美成人综合| 日韩二区三区在线观看| 91免费精品| 亚洲制服少妇| 国产日韩欧美一区在线| 精品精品99| 五月天综合网站| 日韩中出av| 伊人网在线播放| 丝袜脚交一区二区| 久久精品一区二区国产| 性欧美69xoxoxoxo| 欧美日一区二区三区在线观看国产免 | 日韩区欧美区| av最新在线| 老司机精品久久| 欧美韩一区二区| 9色精品在线| 国产精品宾馆| 天堂网在线观看国产精品| 日韩二区在线观看| 久久九九国产| 国产精品色在线网站| 国产二区精品| 国产精品22p| 亚洲综合二区| 高清在线一区| 亚洲精品黄色| 日本韩国欧美超级黄在线观看| 人人爽香蕉精品| 久久久久久久欧美精品| 三级亚洲高清视频| 亚洲播播91| 国产亚洲精aa在线看| 亚洲手机在线| 精品视频一区二区三区在线观看 | 欧美一区=区| 欧美国产小视频| 日本欧美大码aⅴ在线播放| 国产一区亚洲|