PHP の基本的な動作原理から始めましょう
私は以前に .net と Java の開発を行ったことがあり、またいくつかの開発を書きましたPhp Webサイトでは、3大プログラミング言語すべてに触れているようです。しかし、プログラミングプロセス全体、特に基礎となるメカニズムについての全体的な理解が不足していると感じることが増えてきました。たとえば、ネットワーク プログラミング、コンパイルの原則、サーバー側、データベース ストレージ エンジンの原則などです。そこで私はいくつかの本を読みました。古典的なものには、apue、unp、tcp/ip、nginx、mysql の innodb ストレージ エンジンが含まれており、jvm について深く理解しています。開発にどのような言語が使用されても、その背後には Linux、シェル、C/C++、nginx サーバー、mysql が存在することが徐々にわかりました。おそらく、これらの核となる原則と知識を習得することによってのみ、プログラマーは核となる競争力を持つことができます。
BAT のバックエンド部分はこれらのコア テクノロジーから切り離せませんが、フロントエンド (ビジネス ロジック層) は違う。たとえば、淘宝網は主に Java を使用し、百度は主に PHP を使用します。 Tencent はツールを管理するグループであり、主に C/C++ テクノロジーを使用しています。 Tencent の主な製品は、Windows 上のさまざまなクライアント (QQ、インプット メソッド、音楽...最も重要なのはゲーム) とサーバーです。比較的言えば、Web 製品は比較的少数です (QQ Space、Friends Network など)。これらの Web 製品は比較的成熟しており、改良はたまにしか行われません。新しい製品が登場しない限り、人材の需要は大きくありません。
機械学習とビッグデータマイニングの分野では人材の需要が高いようですが、関連テクノロジーはまだ Linux と jvm 上に構築される予定です。一部の企業では Java 人材の需要がさらに高まるでしょう。
C 言語でのコンパイルと接続のプロセス、および JVM での Java の実行メカニズムを理解したところで、私は突然こうなりました。 PHP の動作プロセスや原理にも興味があります。いくつかのブログを見つけて、大まかなアイデアを掴みました。まずそれを以下に示します:
PHP の基本的な動作原理
はじめに
まず見てください。次のプロセス:
- PHP 関連のプロセスを手動で開始したことはありません。Apache の起動とともに実行されます。
- PHP は mod_php 5.so モジュールは Apache (具体的には SAPI、サーバー アプリケーション プログラミング インターフェイス) に接続されます。 PHP には、カーネル、Zend エンジン、拡張層の合計 3 つのモジュールがあります。 PHP カーネルは、リクエスト、ファイル ストリーム、エラー処理、およびその他の関連操作を処理するために使用されます。
- Zend Engine (ZE) は、ソース ファイルをマシン言語に変換して仮想マシン上で実行するために使用されます。
- 拡張レイヤーは、PHP が特定の操作を実行するために使用する関数、ライブラリ、ストリームのセットです。たとえば、MySQL データベースに接続するには mysql 拡張機能が必要です。
- ZE がプログラムを実行するとき、この時点で ZE は制御を拡張機能に渡して返します。特定のタスクを処理した後、
- 最後に、ZE はプログラムの実行結果を PHP カーネルに返し、PHP カーネルは結果を SAPI 層に送信し、最終的にブラウザに出力します。
- 詳細
- Apache が開始されると、PHP インタープリタも開始されます。
- PHP の起動プロセスには 2 つのステップがあります。
- 最初のステップは、いくつかの環境変数を初期化することです。 SAPI ライフサイクル全体を通じて機能します。
- 2 番目のステップは、現在のリクエストに対してのみいくつかの変数設定を生成することです。
PHP を開始するための最初のステップ
最初のステップと 2 番目のステップが何かわからないですか?心配しないでください。これについては次に詳しく説明します。まず、最初の最も重要なステップを見てみましょう。覚えておくべきことは、操作の最初のステップはリクエストが到着する前に行われるということです。
- Apache の起動後、PHP インタープリタも起動します。
- PHP は各拡張機能の MINIT メソッドを呼び出し、これらの拡張機能を使用可能な状態に切り替えます。 php.ini ファイルでどのような拡張機能が開かれているかを確認してください。
- MINIT は「モジュールの初期化」を意味します。各モジュールは、他のリクエストを処理するための関数、クラス ライブラリなどのセットを定義します。
一般的な MINIT メソッドは次のとおりです。
PHP_MINIT_FUNCTION(extension_name){
/* 関数、クラスなどを初期化します */
}
PHP は2 番目のステップ
- ページ要求が発生すると、SAPI 層は制御を PHP 層に渡します。したがって、PHP は、このリクエストに応答するために必要な環境変数を設定します。同時に、実行中に生成された変数名と値を保存する変数テーブルも作成します。
- PHP は各モジュールの RINIT メソッド (「リクエストの初期化」) を呼び出します。典型的な例は、セッション モジュールの RINIT です。php.ini でセッション モジュールが有効になっている場合、モジュールの RINIT が呼び出されたときに $_SESSION 変数が初期化されます。関連するコンテンツが読み込まれます。
- RINIT メソッドは、プログラムの実行の間に自動的に開始される準備プロセスと見なすことができます。
一般的な RINIT メソッドは次のとおりです:
PHP_RINIT_FUNCTION(extension_name) {
/* セッション変数の初期化、変数の事前設定、グローバル変数の再定義など */
}
PHP シャットダウンの最初のステップ
PHP の起動と同様に、PHP のシャットダウンも 2 つのステップに分かれています:
- ページが実行されると (実行されるかどうかに関係なく)ファイルの最後まで移動するか、exit または die 関数を使用して中止すると)、PHP はクリーンアップ プロセスを開始します。各モジュールの RSHUTDOWN メソッドを順番に呼び出します。
- RSHUTDOWN は、プログラムの実行中に生成されたシンボル テーブルをクリアするために使用されます。つまり、各変数の unset 関数を呼び出します。
一般的な RSHUTDOWN メソッドは次のとおりです:
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* メモリ管理を行い、最後の PHP 呼び出しで使用されたすべての変数の設定を解除します。 */
}
PHP シャットダウンの 2 番目のステップ
最後に、すべてのリクエストが処理され、SAPI を閉じる準備が整い、PHP は 2 番目のステップの実行を開始します:
- PHP各拡張機能の MSHUTDOWN メソッドを呼び出すと、これが各モジュールがメモリを解放する最後の機会になります。
典型的な RSHUTDOWN メソッドは次のとおりです:
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* ハンドラーや永続メモリなどを解放します */
}
このように、 PHP ライフサイクル全体が終わりました。 「開始ステップ 1」と「終了ステップ 2」は、サーバーからの要求がない場合にのみ実行されることに注意してください。
以下がイラスト付きでわかる!
PHP の基本的な動作原理
図 1 PHP の構造
図からわかるように、PHP は動作します下から上へ 4 層システムです
①Zend エンジン
Zend は完全に純粋な C で実装されており、PHP コードを変換します (字句解析、構文解析、および解析)。オペコード処理を実行し、対応する処理メソッドを実装し、基本的なデータ構造 (ハッシュテーブル、OO など)、メモリ割り当てと管理を実装し、外部呼び出しに対応する API メソッドを提供することはすべての中核です。すべての周辺機能は Zend 実装を中心にしています。
②拡張機能
拡張機能は、zend エンジンを中心として、共通の各種組み込み関数(配列シリーズなど)や標準ライブラリなど、さまざまな基本サービスをコンポーネントベースで提供します。これを実現するために、ユーザーは必要に応じて独自の拡張機能を実装して、機能拡張、パフォーマンスの最適化、その他の目的を達成することもできます (たとえば、現在 Tieba で使用されている PHP 中間層やリッチ テキスト解析は、拡張機能の典型的なアプリケーションです)。
③Sapi
Sapi の正式名は Server Application Programming Interface で、Sapi は PHP が一連のフック関数を通じて周辺データと対話できるようにします。エレガントで成功した設計では、PHP 自体を sapi を通じて上位層のアプリケーションから分離し、分離することに成功しました。PHP は、異なるアプリケーションとの互換性を考慮する必要がなくなり、アプリケーション自体も独自の特性に応じて異なる処理方法を実装できます。上位層アプリケーション
④ については、後ほど sapi の章で紹介します
これは、私たちが通常作成する PHP プログラムです。Web の実装など、さまざまな sapi メソッドを通じてさまざまなアプリケーション モードを取得できます。 Webサーバー経由で適用、コマンドラインからスクリプトとして実行など。
アーキテクチャのアイデア:
エンジン (Zend) + コンポーネント (ext) モデルにより内部結合が軽減されます
中間層 (sapi) ) Web サーバーと php
************************************** を分離します** *************************************
php の場合が車であれば、
車のフレームワークは php そのものです
Zend は車のエンジン (エンジン)
Ext の下にあるさまざまなコンポーネントは車の車輪です
Sapi は道路と見なすことができ、車はさまざまな種類の道路を走ることができます
そして、php プログラムの実行は、車が道路を走ることを意味します。
したがって、必要なものは次のとおりです: 優れたエンジン + 適切な車輪 + 正しい滑走路
Apache と php の関係
Apache による php の解析は、多くのモジュールの中の php モジュールを通じて完了します。
最終的に php を Apache システムに統合するには、Apache に必要な設定をいくつか行う必要があります。ここでは、php の SAPI 動作モード mod_php5 を例に説明します。SAPI の概念については、後で詳しく説明します。
インストールするバージョンが Apache2 と Php5 であると仮定すると、Apache のメイン設定ファイル http.conf を編集し、次の行を追加する必要があります:
Unix/Linux 環境の場合:
LoadModule php5_module modules/mod_php5.so
AddType application/x-httpd-php .php
注: modules/mod_php5.so は、X システム環境では mod_php5.so です。ファイルのインストール場所。
Windows 環境の場合:
LoadModule php5_module d:/php/php5apache2.dll
AddType application/x-httpd-php .php
注:このうち、d:/php/php5apache2.dllは、Windows環境におけるphp5apache2.dllファイルのインストール場所です。
これら 2 つの設定は、サフィックスとして php を使用して今後受信される URL ユーザー リクエストは、処理のために php5_module モジュール (mod_php5.so/php5apache2.dll) を呼び出す必要があることを Apache サーバーに伝えます。
Apache のライフサイクル
Apache のリクエスト処理プロセス
Apache リクエスト処理サイクルの詳細な説明
Apache リクエスト処理サイクルの 11 段階では何が行われますか? (これらの 11 のステージは、nginx の 11 の処理ステージに対応していますか?)
1. Post-Read-Request ステージ
通常のリクエスト処理プロセスでは、これはモジュールがフックを挿入できる最初の段階です。この段階は、リクエストの処理を非常に早い段階で開始したいモジュールに利用できます。
2. URI 変換フェーズ
このフェーズにおける Apache の主な作業は、要求された URL をローカル ファイル システムにマッピングすることです。モジュールはこの段階でフックを挿入して、独自のマッピング ロジックを実行できます。 mod_alias はこのフェーズを使用して動作します。
3. ヘッダー解析フェーズ
このフェーズにおける Apache の主な作業: リクエストのヘッダーを確認します。モジュールはリクエスト処理フローのどの時点でもリクエスト ヘッダーをチェックするタスクを実行できるため、このフックが使用されることはほとんどありません。 mod_setenvif はこのフェーズを使用して動作します。
4. アクセス制御フェーズ
このフェーズにおける Apache の主な作業は、要求されたリソースへのアクセスが構成ファイルに従って許可されているかどうかを確認することです。 Apache の標準ロジックは、許可ディレクティブと拒否ディレクティブを実装します。 mod_authz_host はこのフェーズを使用して動作します。
5. 認証段階
この段階における Apache の主な作業は、設定ファイルに設定されたポリシーに従ってユーザーを認証し、ユーザー名領域を設定することです。モジュールはこの段階でフックを挿入して、認証方法を実装できます。
6. 認可フェーズ
このフェーズにおける Apache の主な作業は、認証されたユーザーが構成ファイルに従って要求された操作の実行を許可されているかどうかを確認することです。モジュールはこの段階でフックを挿入して、ユーザー権限管理メソッドを実装できます。
7. MIME タイプ チェック フェーズ
このフェーズにおける Apache の主な作業: 要求されたリソースの MIME タイプの関連ルールに基づいて、使用するコンテンツ処理機能を決定します。標準モジュール mod_negotiation および mod_mime はこのフックを実装します。
8. FixUp フェーズ
これは、モジュールがコンテンツ ジェネレーターの前に必要な処理を実行できるようにする一般的なフェーズです。 Post_Read_Request と同様に、これはあらゆる情報を取得できるフックであり、最も一般的に使用されるフックでもあります。
9. 応答フェーズ
このフェーズにおける Apache の主な作業は、クライアントに返されるコンテンツを生成し、クライアントに適切な応答を送信する責任を負います。この段階はプロセス全体の中核部分です。
10. ロギングフェーズ
このフェーズにおける Apache の主な作業: 応答がクライアントに送信された後のトランザクションを記録します。モジュールは、Apache の標準ログを変更または置き換えることができます。
11. クリーンアップフェーズ
このフェーズにおける Apache の主な作業: ファイルやディレクトリの処理やソケットのクローズなど、このリクエストトランザクションの完了後に残された環境をクリーンアップします。 . Apache にとって初めてのリクエスト処理の最終段階です。
LAMP アーキテクチャ:
下から上への 4 つの層:
①liunx はオペレーティング システムの最下層に属します
②セカンダリサーバーに属するapacheサーバーは、linuxおよびPHPと通信します
③php:サーバーサイドプログラミング言語であり、php_moduleモジュールを通じてapacheに関連付けられています
④mysql およびその他の Web サービス : アプリケーション サービスに属し、PHP の拡張プラグイン モジュールを通じて mysql に関連付けられます
さらに詳しい研究と理解については、以下をご覧ください:
Fengyu のブログ http://www.laruence.com/2008/08/12/180.html
百度研究開発センターのブログ http://stblog.baidu-tech. com/?p=763
王興斌のブログ http://blog.csdn.net/wanghao72214/article/details /3916825

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 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 プラットフォームで実行できます。
