ホームページ  >  記事  >  バックエンド開発  >  インタプリタの実行プロセスの PHP カーネル探索

インタプリタの実行プロセスの PHP カーネル探索

WBOY
WBOYオリジナル
2016-07-29 09:09:361093ブラウズ

cli (コマンドラインインターフェイス) は PHP のコマンドラインモードです。PHP をサーバーにインストールすると、通常、このファイルが /usr/local/bin に生成されます。 /php にアクセスし、次のコマンドを使用して SHELL で PHP スクリプトを実行します:

コードをコピーします コードは次のとおりです:


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

CLI SAPI を例として、PHP 実行のコア部分を分析します。 CLI は php コマンド ライン モードです。この SAPI はデフォルトでインストールされます。PHP がサーバー側にインストールされると、シェルで PHP コマンドを呼び出すことで実行可能ファイルが生成されます。

コードをコピーします コードは次のとおりです:


PHP -f XX.php

実行プロセス:

コマンドラインパラメータを解析します。

環境を初期化します。

PHP コードをコンパイルして実行します。

環境をクリーンアップして終了します。

3 番目の段階では、PHP スクリプトを実行する方法:

php_execute_script(handle_file) を呼び出して、最終的に zend_execute_scipts を呼び出します。 (…), この関数は複数のPHPスクリプトを一度に実行できる可変パラメータ関数です。

zend_execut_scripts(…..) 関数では、コアは 2 つの関数 (zend_compile_file)(compile_file)、(*zend_execute)(zend_op_array) を呼び出します。

zend_compile_file コンパイル パラメーターで指定された php スクリプト ファイルを呼び出すことにより、これは関数は zend_op_array 構造体ポインターを返します。

zend_execute に渡されるパラメーターは zend_compile_file の戻り値であり、オペコードの実行が開始されます。

これら 2 つの関数は Zend API であり、エンジンの初期化時に特定のメソッドを返す関数ポインターです。

ps.: では、なぜこれら 2 つの Zend API は関数ポインターなのでしょうか?

エンジンが初期化されると、zend_execute と zend_compile_file はエンジンの初期化時のデフォルトのメソッドを指します。コンパイルおよび実行中に関数ポインタをオーバーライドして、エンジンを拡張するためのフックを残すことができます。例: vld は、zend_execute および zend_compile_file を、元の関数をカプセル化する独自の関数にポイントし、オペコード情報の出力を追加します。

上記では、PHP カーネル探索のためのインタプリタの実行プロセスを、関連する側面も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。