phpカーネル探索ノート-解釈器の実行過程


CLI SAPIを例にphp実行コア部分を解析する.CLIはphpコマンドラインモードで、このSAPIはデフォルトでインストールされており、サーバー側にPHPがインストールされた後、shellでPHPコマンドを呼び出して実行できる実行可能ファイルが生成されます.
PHP -f XX.php

プロセスの実行:
  • コマンドラインパラメータを解析します.
  • 初期化環境;
  • はPHPコードをコンパイルして実行する.
  • 環境を整理し、終了する.

  • フェーズ3でPHPスクリプトを実行する方法:php_を呼び出すexecute_script(handle_file)は、最終的にzend_を呼び出す第3のフェーズを完了するために使用されます.execute_scipts(...)は、複数のPHPスクリプトを一度に実行できる可変パラメータ関数です.zend_でexecut_scripts(…..)関数のコアは、(zend_compile_file),(*zend_execute),(zend_op_array)の2つの関数を呼び出します.
  • 呼び出しzend_compile_fileはパラメータで指定したphpスクリプトファイルをコンパイルし、zend_を返します.op_Arrayの構造ポインタ;
  • zend_executeが入力したパラメータはzend_ですcompile_fileの戻り値は、opcodeの実行を開始します.

  • この2つの関数はZend APIであり,エンジン初期化時に特定の値を返す関数ポインタである.ps.では、なぜこの2つのZend APIが関数ポインタなのでしょうか.
  • エンジン初期化時、zend_executeとzend_compile_fileはエンジンの初期化時にデフォルトの方法を指します.書き換え関数の指向をコンパイルして実行することができ、エンジンを拡張するときにフックを残すことができます.たとえば、vldはzend_をexecuteとzend_compile_fileは元の関数をカプセル化した関数を指し,opcode情報の出力を追加した.