検索

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 までご連絡ください。
トラフィックの高いウェブサイトのPHPパフォーマンスチューニングトラフィックの高いウェブサイトのPHPパフォーマンスチューニングMay 14, 2025 am 12:13 AM

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

PHPでの依存関係注射:初心者向けのコード例PHPでの依存関係注射:初心者向けのコード例May 14, 2025 am 12:08 AM

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

PHPパフォーマンス:アプリケーションを最適化することは可能ですか?PHPパフォーマンス:アプリケーションを最適化することは可能ですか?May 14, 2025 am 12:04 AM

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

PHPパフォーマンスの最適化:究極のガイドPHPパフォーマンスの最適化:究極のガイドMay 14, 2025 am 12:02 AM

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

PHP依存性噴射コンテナ:クイックスタートPHP依存性噴射コンテナ:クイックスタートMay 13, 2025 am 12:11 AM

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

PHPの依存噴射対サービスロケーターPHPの依存噴射対サービスロケーターMay 13, 2025 am 12:10 AM

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

PHPパフォーマンス最適化戦略。PHPパフォーマンス最適化戦略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPメールの検証:電子メールが正しく送信されるようにしますPHPメールの検証:電子メールが正しく送信されるようにしますMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Safe Exam Browser

Safe Exam Browser

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

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール