PHP の実行方法
この記事では、PHP コードがどのように解釈および実行されるか、および PHP スクリプト実行のライフ サイクルについて説明します。
概要
PHP サービスの起動。厳密に言えば、PHP 関連のプロセスは、Apache の起動時に手動で開始する必要はありません。もちろん、PHP サービスを再起動する必要がある場合は、PHP サービスを手動で再起動することもできます。たとえば、オペコードを有効にして正式な環境でコードを更新した後、PHP を再起動して PHP コードを再コンパイルする必要があります。
マクロの観点から見ると、PHP カーネルの実装は、入力データを受け取り、内部で対応する処理を実行し、結果を出力することです。 PHP カーネルの場合、記述した PHP コードはカーネルによって受信された入力データであり、コード データを受信した後、PHP カーネルは記述したコードに対してコード解析と演算実行を実行し、最終的に対応する演算結果を返します。
ただし、通常の C 言語コードとは異なり、PHP コードを実行するには、まず PHP コードを機械語に「変換」して、対応する機能を実行する必要があります。 「翻訳」ステップを実行するには、PHP カーネルが字句解析、構文解析、その他のステップを実行する必要があります。最後に、PHP カーネルの Zend Engine に渡されて、順次実行されます。
字句解析
PHP コードを「ユニット」に分割 (TOKEN)
構文解析
変換 " 「unit」を Zend Engine で実行可能な操作に変換
Zend Engine 実行
構文解析で得られた操作を順番に実行
すべての PHP プログラムの先頭 ( CGI/CLI) は、SAPI (サーバー アプリケーション プログラミング インターフェイス) インターフェイスから始まります。 SAPI は、特定の PHP アプリケーションのプログラミング インターフェイスを指します。たとえば、Apache の mod_php です。
PHP は実行を開始すると、リクエストを処理する前の開始フェーズとリクエスト後の終了フェーズという 2 つの主なフェーズを経ます。
開始フェーズ
PHP の開始フェーズ全体は、モジュールの初期化とモジュールのアクティブ化という 2 つのフェーズを経ます。
MINIT
はモジュールの初期化フェーズであり、Apache/Nginx の起動後のライフサイクル全体、またはコマンド ライン プログラムの実行中に発生します。フェーズは 1 回だけ発生します
RINIT
モジュールのアクティブ化はリクエスト フェーズで発生します。定数の登録、モジュールで使用されるクラスの定義など、いくつかの初期化作業を実行します。
モジュールが実装されると、これらのコールバック関数は次のマクロを通じて実装できます:
PHP_MINIT_FUNCTION(myphpextension){//注册常量或者类等初始化操作return SUCCESS;}PHP_RINIT_FUNCTION(myphpextension){//例如记录请求开始时间//随后在请求结束的时候记录结束时间。这样我们就能够记录处理请求所花费时间了return SUCCESS;}
PHP スクリプトのリクエストが処理された後、PHP は通常、スクリプトが最後まで実行されるか、exit または die 関数が呼び出されたときに終了フェーズに入ります。
終了フェーズ
PHP の終了フェーズは、モジュールの非アクティブ化とモジュールの終了の 2 つの部分に分かれています。
RSHUTDOWN
モジュールを無効にする (RINIT に対応)
MSHUTDOWN
モジュールを閉じる (MINIT に対応)
CLI/CGI モード PHP はシングルプロセス SAPI モードに属します。これは、PHP スクリプトが一度実行された後に閉じられ、すべての変数と関数が使用できなくなることを意味します。つまり、CGI モードでは、同じ PHP ファイルの変数を他の PHP ファイルで使用することはできません。
例を使用して、シングルスレッド PHP の SAPI ライフサイクルを見てみましょう。
シングルスレッド SAPI ライフサイクル
例:
php -f test.php
各拡張機能の MINIT モジュール初期化を呼び出します
test.php を要求します
各拡張機能の RINIT モジュールを呼び出してアクティブ化します
test.php を実行します
各拡張機能の RSHUTDOWN を呼び出してモジュールを非アクティブ化します
test.php の実行後に変数とメモリをクリーンアップします
各拡張機能の MSHUTDOWN を呼び出す モジュールを閉じる
PHP の実行を停止する
上記は単純な実行処理ですが、以下にいくつか追加します。
PHP には、各モジュールのモジュール初期化を呼び出す前に、次のような初期化プロセスがあります。
いくつかのグローバル変数の初期化
ほとんどの場合、NULL に設定します。
いくつかの定数を初期化します
ここでの定数は、PHP 独自の定数の一部です。
Zend エンジンとコア コンポーネントの初期化
ここでの初期化操作には、メモリ管理の初期化、グローバル関数ポインタの初期化、字句解析、構文解析、PHP ソース ファイルの中間コードの割り当てが含まれます。実行された関数ポインタ、複数の HashTable (関数テーブル、定数テーブルなど) の初期化、ini ファイル解析の準備、PHP ソース ファイル解析の準備、組み込み関数、標準定数、GLOBALS グローバル変数の登録など。
php.ini を解析します
php.ini ファイルを読み取り、設定パラメータを設定し、zend 拡張機能をロードし、PHP 拡張機能を登録します。
グローバル操作関数の初期化
ユーザー空間で頻繁に使用されるいくつかのグローバル変数 ($_GET、$_POST、$_FILES など) を初期化します。
静的にビルドされたモジュールと共有モジュールを初期化します (MINIT)
デフォルトでロードされるモジュールを初期化します。
モジュールの初期化は次の操作を実行します。
モジュールを登録モジュールリストに登録します。
各モジュールに含まれる関数を関数テーブルに登録します。
関数とクラスを無効にします
zend_disable_function 関数は、PHP 設定ファイルの disable_functions 変数で表される関数を CG (function_table) 関数テーブルから削除するために呼び出されます。
Zend エンジンをアクティブにする
init_compiler 関数を使用してコンパイラを初期化します。
SAPI をアクティブ化します
sapi_activate 関数を使用して SG (sapi_headers) と SG (request_info) を初期化し、HTTP リクエスト メソッドのコンテンツを設定します。
環境の初期化
ユーザー コントロールで使用する必要があるいくつかの環境変数を初期化します。サーバー環境、リクエストデータ環境等を含みます。
モジュールリクエストの初期化
PHP は、zend_activate_modules 関数を呼び出して module_registry 変数に登録されているすべてのモジュールを走査し、RINIT メソッドを呼び出してモジュールのリクエスト初期化操作を実装します。
ファイル関連のコンテンツを処理した後、PHP は php_request_startup を呼び出してリクエストの初期化操作を実行します。
Zend エンジンをアクティブ化
SAPI をアクティブ化
環境の初期化
module リクエスト初期化
コード実行
以上の準備が完了したら、PHP プログラムの実行を開始します。 PHP は、zend_compile_file を通じて字句解析、構文解析、中間コード生成操作を実行し、このファイルのすべての中間コードを返します。解析されたファイルが有効な中間コードを生成する場合、zend_excute が呼び出されて中間コードが実行されます。 。実行中に例外が発生し、ユーザーがこれらの例外の処理を定義している場合、これらの例外処理関数が呼び出されます。すべての操作が処理された後、PHP は EG (return_value_ptr_ptr) を通じて結果を返します。
DEACTIVATION (Close request)
PHP がリクエストを閉じるプロセスは、いくつかの終了操作のセットであり、このセットは php_request_shutdown 関数内に存在します。これには以下が含まれます:
register_shutdown_function() を通じて登録されたすべての関数を呼び出します。シャットダウン時に呼び出されるこれらの関数はユーザー空間に追加されました。
PHP がプロセスを終了すると、sapi_flush 関数が呼び出され、内容が更新され、zend_shutdown 関数が呼び出されます。 Zend エンジン
利用可能なすべての __destruct 関数を実行します。ここでのデストラクタには、オブジェクト プール内のすべてのオブジェクトのデストラクタ (EG (objects_store)) と EG の各要素のデストラクタ メソッド (symbol_table) が含まれます。
すべての出力をフラッシュします。グローバル変数テーブル (PG (http_globals)) の変数を破棄します。
zend_deactivate 関数を使用して、レクサー、パーサー、および中間コード エグゼキューターを閉じます。 基本的に、各拡張 post_deactivate_func 関数ポインターを呼び出します。
SAPI を閉じ、sapi_deactivate を通じて SG (sapi_headers)、SG (request_info) などの内容を破棄します。
メモリ管理をオフにします。最大実行時間
End
参考: [http://www.php-internals.com/book/](http://www.php-internals.com/book./)

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
