目次
PHP の基礎となる動作原理
Apache と php の関係
Apache のライフサイクル
Apache のリクエスト処理プロセス
Android システム アーキテクチャ図

PHP の仕組みの基本

Jul 04, 2018 pm 04:43 PM

この記事では主に PHP の動作原理の基本を紹介します。これには一定の参考値があります。今、みんなに共有しています。困っている友達は参考にしてください。

私は最近サーバーを構築し、突然ランプのように感じました。正確にはどのように機能するのでしょうか、またはどのように接続されているのでしょうか?私は普段プログラムを書くだけで、プログラム間の動作原理について考えたことはありません。

PHP の基礎となる動作原理

図 1 PHP の構造

写真からわかるように、PHP は下から上まで 4 層のシステムです。

①Zend エンジン

Zend は純粋な C で実装されており、PHP のコア部分です。 PHP: PHP コードを統合します 変換 (字句解析や構文解析などの一連のコンパイル プロセス) 実行可能オペコードの処理と対応する処理メソッドの実装、基本的なデータ構造 (ハッシュテーブル、OO など)、メモリの割り当てと管理の実装、および対応する API の提供外部呼び出しのメソッドがすべての中核であり、すべての周辺機能は zend を中心に実装されています。

②拡張機能

zendエンジンを中心に、共通の各種組み込み関数(配列系列など)や標準ライブラリなど、さまざまな基本サービスをコンポーネントベースで提供する拡張機能です。これを実現するために、ユーザーは機能拡張、パフォーマンスの最適化、その他の目的を達成するために、必要に応じて独自の拡張機能を実装することもできます (たとえば、現在 Tieba で使用されている PHP 中間層やリッチ テキスト解析は、拡張機能の典型的なアプリケーションです)。

③Sapi

Sapi の正式名は Server Application Programming Interface で、サーバー アプリケーション プログラミング インターフェイスです。Sapi を使用すると、PHP は一連のフック関数を通じて周辺データと対話できます。これは PHP の非常にエレガントで、成功した設計は、SAPI を通じて PHP 自体を上位層アプリケーションから切り離し、分離することに成功しました。PHP は、異なるアプリケーションとの互換性を考慮する必要がなくなり、アプリケーション自体も、その特性に応じて異なる処理方法を実装できます。これについては、後ほど sapi の章で紹介します。

④上位層アプリケーション

これは、私たちが通常作成する PHP プログラムです。さまざまな sapi メソッドを通じて、さまざまなアプリケーション モードを取得できます。 webserver コマンドラインからスクリプトとして適用、実行など。

アーキテクチャのアイデア:

エンジン (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 段階では何​​が行われますか?

1. 読み取りリクエスト後のステージ

通常のリクエスト処理プロセスでは、これはモジュールがフックを挿入できる最初のステージです。この段階は、リクエストの処理を非常に早い段階で開始したいモジュールに利用できます。

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 に関連付けられます。

Android システム アーキテクチャ図

比較ランプと Android のアーキテクチャ図、ランプのアーキテクチャに少し似ているようです、Android はわかりませんが、少し似ているように感じます。専門家の方は違いを指摘していただけます。非常に感謝します。

上から下:

Android アーキテクチャ -- ------------説明--------LAMP アーキテクチャ

1. アプリケーション --------特定のアプリケーション ---- -web アプリケーション

2. アプリケーション フレームワーク ----java-------- ----PHP 言語とライブラリ

3. システム ランタイム ライブラリ:-- --仮想マシン--------WEB サーバー

⒋Linux カーネル:---動作中システム-----L

ランプ アーキテクチャにおけるランプとコンピュータ内部の関係

CPU は工場出荷時、ハードディスクは大きな倉庫、メモリは通常の転送センター、仮想メモリは一時転送センターです

Php言語はzendによって機械語にコンパイルされ、cpuが動作します

データベースの動作「Web サイトのボトルネックは、I/O 操作と機械的な動作です。つまり、Web サイトのボトルネックは、ハードディスクへの読み取りと書き込みによって引き起こされます。解決策は、I/O 操作の数を減らすことです。バッファリング技術の使用は、データ操作はメンキャッシュに配置され、それが一定の大きさに達すると、すぐにデータベースに書き込まれます。メンキャッシュは、リレーショナル データではなく、キーと値の関係

# に属します。これもこの概念に基づいて構築されており、キーと値の関係にも属します

頻繁な読み取り操作-----mencache に入れます

もっと読んで、書く量を減らします- ---nosqlに入れてください----- ・読み込み機能が強力です!

上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP ソース コード差別化プラットフォーム MVC 構造の紹介

Laravel5の高速認証ロジック処理の解析

以上がPHP の仕組みの基本の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

See all articles