ホームページ > バックエンド開発 > PHPチュートリアル > インタプリタの実行プロセスの PHP カーネル探索、_PHP チュートリアル

インタプリタの実行プロセスの PHP カーネル探索、_PHP チュートリアル

WBOY
リリース: 2016-07-12 09:02:36
オリジナル
899 人が閲覧しました

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

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

コードをコピーします コードは次のとおりです: /usr/local/bin/php -f test.php

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

コードをコピーします コードは次のとおりです: PHP -fXX.php

実行プロセス:

コマンドラインパラメータを解析する;

環境を初期化します;

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

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

第 3 段階では、PHP スクリプトの実行方法:

php_execute_script(handle_file) を呼び出して 3 番目の段階を完了します。これにより、最終的に 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 デザインパターンのインタープリターモードの詳細な分析
  • PHP カーネルの探索: 変数ストレージと型の使用方法
  • PHP カーネルの探索: 変数の概要
  • PHPカーネル探索: ハッシュテーブル衝突攻撃の原理
  • PHPカーネル探索の変数
http://www.bkjia.com/PHPjc/1084570.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1084570.html技術記事インタプリタの実行プロセスの PHP カーネルの探索、PHP のコマンド ライン モードである cli (コマンド ライン インターフェイス) は、PHP をサーバーにインストールした後、デフォルトでインストールされます。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート