cli(command line inte***ce)即php的命令列模式,現在此sapi是默www.cppcns.com認安裝的,我們在伺服器上安裝完php之後www.cppcns.com,一般會生成乙個可執行檔案,假設此檔案為/usr/local/bin/php ,那麼我們在shell下可以用以下命令來執行乙個php指令碼:
複製** **如下:
/usr/local/bin/php -f test.php
以cli sapi為例來對php執行核心部分進行解析。cli是php命令列模式,此sapi是預設安裝的,在www.cppcns.com伺服器端安裝過php後,生成以乙個可執行檔案,可以在shell中呼叫php命令來執行。
複製** **如下:
php -f xx.php
執行流程:
解析命令列引數;
初始化環境;
編譯執行php**;
程式設計客棧清理環境,退出;
在第3個階段中,如何執行php指令碼的:
通過呼叫php_execute_script( handle_file )來完成第三階段,該www.cppcns.com函式最終會呼叫zend_execute_scipts( … ) ,這個函式是乙個可變參函式,可以一次執行多個php指令碼。
在zend_execut_scripts(…..)函式中核心呼叫了(zend_compile_file)( compile_file ), (*zend_execute)( zend_op_array )這兩個函式;
通過呼叫zend_compile_file編譯引數指定的php指令碼檔案,該函式會返回乙個zend_op_array的結構指標;
zend_execute傳入的引數是zend_compile_file的返回值,就開始執行opcode了。
這兩個函式是zend api,是乙個函式指標,在引擎初始化的時候回賦值具體的方法。
ps.:那為什麼這兩個zend api是函式指標呢?
在引擎初始化的時候,zend_execute和zend_compile_file會在引擎初始化的時候指向預設的方法。我們可以在編譯和執行重寫函式的指向,這樣就為我們擴充套件引擎時留下了鉤子。例如:vld將zend_execute和zend_compile_file指向自己對原始函式封裝後的函式,新增了opcode資訊的輸出。
本文標題: php核心探索之直譯器的執行過程
本文位址:
php核心探索筆記 直譯器的執行過程
以cli sapi為例來對php執行核心部分進行解析。cli是php命令列模式,此sapi是預設安裝的,在伺服器端安裝過php後,生成以乙個可執行檔案,可以在shell中呼叫php命令來執行。php f xx.php執行流程 在第3個階段中,如何執行php指令碼的 通過呼叫php execute s...
PHP直譯器引擎執行流程
這裡將介紹引擎內部執行乙個php指令碼的流程,以cli sapi為例子來對流程中核心的部分做簡單介紹,省去一些初始化及清理操作。cli command line inte ce 即php的命令列模式,現在此sapi是預設安裝的,我們在伺服器上安裝完php之後,一般會生成乙個可執行檔案,假設此檔案為 ...
php語法直譯器 php直譯器的安裝方法
php在windows下安裝配置第一步 還有2個檔案 乙個 php.ini development 乙個是 php.ini production 從名字也可以看出是開發環境跟生產環境的區別了 找到 extension dir ext 刪除最前面的分號 找到 extension php mbstrin...