1.4.2 エントリーファイル(1)

1.4.2 エントリーファイル(1)

1.4.2 エントリーファイル(1)

このセクションでは、まずシステムの複数のリクエスト エントリ設計によって生じる不便さを紹介し、次に単一のリクエスト エントリ設計パターンの実装原則を紹介します。このセクションの学習目標は、単一エントリ ファイル設計パターンの利点を明確にし、将来の開発プロジェクトで複数のエントリ ポイントを回避することです。

1. エントリーファイルのデザイン

システム内でアクセスできる PHP ファイルはすべてエントリ ファイルと呼ばれます。異なるユーザー要求が Web サーバー内の異なる PHP ファイルに直接対応する場合は、システムはマルチエントリ設計になります。 PHP を初めて学習するときは、通常、プロジェクトのために次のことを行います。

index.php - ホームページ

list.php?page=5 ——コンテンツ一覧ページ

info.php?id=12 ——コンテンツ詳細ページ

login.php ——ユーザーログインページ

または、セクション 1.4.1 で MVC フレームワーク パターンを実装した後、DefaultController.php や SiteController.php などのさまざまなコントローラー クラス ファイルにアクセスします。

これらのプロジェクトには複数のエントリ ファイルがあります。プロジェクトの規模が拡大し続けると、システムディレクトリ構造の混乱、その後のメンテナンスの難しさ、プログラムの脆弱性の容易な露出、システムの統一管理の不便さなど、複数のエントリの設計上の欠陥がますます顕著になります。複数エントリ設計によって発生する多くの問題を回避するために、単一エントリ設計モードを使用できます。単一エントリ設計パターンでは、1 つのファイルがすべての HTTP 要求を処理します。つまり、DefaultController.php、SiteController.php、またはその他のコントローラー クラス ファイルなど、任意のコントローラー ファイルにアクセスします。各リクエストは、エントリ ファイル index.php などのサーバー上の同じファイルを指します。このファイルは、図 1-6 に示すように、URL を解析し、最終的にアクセスするページにリダイレクトする役割を担います。

PHP シングル エントリ モードは現在、大規模な Web アプリケーション開発モデルとして人気があります。 Zend、ThinkPHP、Yii など、現在人気のある PHP 開発フレームワークの一部は、すべてシングル エントリ モードを採用しています。

単一エントリ ファイル モードを使用する利点は次のとおりです。

より安全。単一エントリ モードでは、ユーザーに単一のリクエスト エントリが提供され、リクエストをフィルター処理したり、セキュリティ処理コードを追加したりできます。従来のマルチリクエストエントリモードでは、各ファイルにセキュリティ処理プログラム ブロックを追加する必要があります。

高度なモジュール性。開発者は開発するモジュールにのみ集中する必要があります。これらすべてはエントリ ファイルによって調整されるため、プログラムが正常に実行されるかどうかを心配する必要はありません。

統一された方法で簡単に管理でき、高度なカスタマイズが可能です。システムのすべてのモジュールはエントリ ファイルによって一様に管理され、モジュール自体がなくても任意のモジュールを有効化または無効化できます。

2. エントリファイルにURL解析を実装する

上記のエントリ ファイルの URL 解析は、エントリ ファイルが元の要求を対応する処理コントローラーに転送して、特定のビジネス処理を完了することを意味します。たとえば、次の URL アドレスがあります。

  1. http:// <ホスト名> /
  2. http : // <ホスト名> /index.php
  3. http : // <ホスト名> /index.php?r=site  
  4. http:// <ホスト名> /index.php? r =サイト/ インデックス

カスタム フレームワークは Yii フレームワークを模倣し、パス (PATH) URL モード アクセス ルールを採用します。パス URL モードは、ディレクトリ階層の考え方を採用しています。パス形式は簡潔で、URL 解析の効率は高いです。 URL の形式は次のとおりです: http://<hostname>/appname/index.php?r= controllerID/actionID

上記のすべての URL が解決された後、SiteController コントローラーの actionIndex() メソッドにアクセスすることを期待します。 URL 解析実行プロセスを図 1-7 に示します。まず、エントリ ファイルにアクセスして、リクエスト URL のパラメータを分析します。 「r」パラメータがない場合、デフォルトで SiteController の actionIndex() メソッドにアクセスします。それ以外の場合は、SiteController の actionIndex() メソッドは "r" パラメータに基づいてアクセスされます。つまり、すべてのアクセスは URL パラメータに基づいて均一に解析され、スケジュールされます。

エントリ ファイル index.php 内のコード実装は次のとおりです。

  1. <? php  
  2. //デフォルトのコントローラはSiteControllerです
  3. $ defaultController = "サイト" ;
  4. //デフォルトアクション actionIndex
  5. $ defaultAction = "インデックス" ;
  6. // URL が http://hostname/index.php の場合? r =コントローラーID / アクションID
  7. //コントローラID/アクションIDを取得
  8. if(!empty($_GET['r']))
  9. {
  10. $ルート= $_GET['r'];
  11. //コントローラIDを取得し、メンバー変数に割り当てる
  12. $ pos = strpos ($route,'/');
  13. $ defaultController = substr ($route,0,$pos);
  14. デフォルトコントローラstrtolower に設定します
  15. //アクションIDを取得し、メンバー変数に割り当てる
  16. $ defaultAction =(文字列)substr($route,$pos+1);
  17. }
  18. //コントローラクラス名を取得する
  19. $ className = ucfirst ($defaultController).'コントローラー';
  20. //コントローラのファイルパスを取得する
  21. $ classFile = "./controllers/" .$className.'.php';
  22. //最後のステップ: クラス ファイルが存在する場合は、それをインポートします。クラスが存在する場合は、オブジェクトを作成し、acionメソッドを呼び出します。
  23. if(is_file($classFile))
  24. {
  25. if(!class_exists($className,false))
  26. {
  27. $classFile が必要です。
  28. $クラス=新しい$className();
  29. $関数名= "アクション" .ucfirst($defaultAction);
  30. $class -> $functionName();
  31. }
  32. }
  33. ?>  

上記のプログラムから、デフォルトのコントローラーは SiteController であり、デフォルトの実行メソッドは actionIndex() メソッドであることがわかります。コントローラー クラス名の最初の文字は大文字で、「Controller」で終わり、コントローラー クラス ファイルは controllers フォルダーに保存する必要があります。アクション メソッド名には「action」という接頭辞を付け、アクション ID の最初の文字を大文字にする必要があります。このプログラムではファイル名やクラス名が使用されるため、コーディング標準の重要性も理解できます。同様に、これから学習する Yii フレームワークの開発中は、特定のコーディング標準に従う必要があります。たとえば、クラスに名前を付ける場合は、camelCase を使用します。つまり、各単語の最初の文字を大文字にして、間にスペースを入れずにつなげます。変数名とメソッド名は、クラス名と区別するために、最初の単語をすべて小文字にし、残りの単語の最初の文字を大文字にする必要があります (例: $basePath および runController())。プライベート クラス メンバー変数の場合は、$_actionList のように、名前のプレフィックスとしてアンダースコアを使用することをお勧めします。

ヒント:

PHP 言語で開発されたフレームワークが共通のコーディング スタイルに従うようにするために、いくつかのフレームワークの開発者が 2009 年に PHP-FIG (PHP Framework Interoperability Group) を結成し、現在では 20 名を超えるメンバーに拡大しています。

エントリ ファイルを実装した後のフレームワーク実行プロセスを図 1-8 に示します。

1. ユーザーは URL にアクセスするためのリクエストを送信し、Web サーバーはエントリ ファイル index.php を実行してこのリクエストを処理します。

2. エントリ ファイルは、URL 解析を完了し、URL 要求に基づいてコントローラーを作成し、アクションを呼び出してユーザー要求を処理する役割を担います。

3. コントローラーはモデルインスタンスオブジェクトを呼び出して、データベースからデータを読み取ります。

4. ビューをレンダリングします。

5. ビューはモデルからデータを読み取って表示します。

6. アクションはビューのレンダリングを完了し、ユーザーに返します。

3. シングルエントリモードのサーバー環境構成

シングル エントリ モードを実装した後、エントリ ファイル以外の PHP ファイル (セキュリティ上重要なすべての PHP ファイル) がアプリケーション ルート ディレクトリにアクセスできないようにする必要があります。実践により、Apache サーバーのディレクトリ レベルの構成ファイル .htaccess ファイルを使用してディレクトリを保護する方が、他の方法を使用するよりも効果的で安全であることが証明されています。さらに重要なのは、.htaccess を使用した設定はプログラムを書かなくても実行でき、具体的な操作も比較的簡単であることです。

(1)ディレクトリレベルの設定ファイル.htaccess

.htaccess は、Apache サーバーの構成に関連するいくつかの指示が含まれるプレーン テキスト ファイルです。これは、httpd.conf ファイルなどの Apache のサイト構成ファイルに似ています。 .htaccess 構成ファイルは、このディレクトリとそのすべてのサブディレクトリにのみ適用されるという点で、httpd.conf 構成ファイルとは異なります。さらに、httpd.conf は Apache サービスが起動されたときに読み込まれますが、.htaccess はユーザーがディレクトリにアクセスしたときにのみ読み込まれます。 .htaccess ファイルを変更する場合、Apache サーバーを再起動する必要はありません。 .htaccess の機能には、Web ページのパスワードの設定、エラー発生時に表示されるファイルの設定、ファイルの読み取り禁止、ファイルのリダイレクトなどがあります。

ディレクトリのサーバー構成を変更する必要があり、サーバー システムに対するルート権限を持っていない場合は、.htaccess ファイルを使用する必要があります。サーバー管理者が頻繁に構成を変更したくない場合は、ユーザーが .htaccess ファイルを通じて自分で構成を変更できるようにすることができます。これは、1 台のマシンに複数のユーザー サイトが提供され、ユーザーが自分で構成を変更することが予想される場合に特に当てはまります。通常、一部の .htaccess 機能はユーザー自身で設定できます。

知らせ:

.htaccess は完全なファイル名であり、***.htaccess やその他の形式ではありません。

ユーザーが .htaccess ファイルを使用できるようにするにはどうすればよいですか? Apache サーバーの構成ファイル httpd.conf で、サーバーのルート ディレクトリの構成情報を見つけます。

  1. <ディレクトリ"e:/wamp/www/" >  
  2. 上書きを許可しない
  3. </ディレクトリ>  

気に入った友達はWeChatアカウントを追加できます:

51CTO 読書チャンネル QR コード


51CTO 読書チャンネル アクティビティ ディスカッション グループ: 365934973

<<:  1.4.1 MVCフレームワークパターンの実装(2)

>>:  1.4.2 エントリーファイル(2)

推薦する

ブランドマーケティングを「ヒト・モノ・場所」の観点から分析するには?

新しい消費者ブランドの開発が活発化する中、従来の販売ロジックだけに焦点を合わせるのではなく、ブランド...

ブログから収入を得るのは非常に困難です。突破口を見つけることが最善の戦略です。

「広告掲載による収益獲得に成功しなければ、ブログから収益を得ることは極めて困難です。」私はa5でこの...

Hosteons ニューヨーク データセンターの AMD Ryzen+NVMe シリーズ VPS の簡単なレビュー

Hosteonsは、米国東海岸のニューヨークデータセンターにAMD Ryzen+NVMe高性能シリー...

softshellweb: 年間 40 ドル、サンノゼ/ウーマー、KVM/3G メモリ/3 コア/60g SSD/6T トラフィック (超過した場合は帯域幅が 100M に削減されます)

Softshellwebの秋のプロモーションが始まり、アメリカ西海岸の「サンノゼ」データセンターとオ...

外部リンクを投稿することは、依然としてウェブサイトをランク付けする最良の方法です

2012年6月以来、百度は一連のアルゴリズムアップデートを実施してきました。その中で、百度の発表では...

estnoc: カンボジア VPS、中国本土への直接接続、CN2+AS4837、月額 10 ユーロから、専用サーバー付き

estnocは、中国本土への直接ネットワーク接続、低いping値、高速速度を備えたカンボジアVPSと...

ウェブサイトのおすすめ: Makies 3D プリントで仮想キャラクターを本物の人形に変身

Makies が提供するキャラクター テンプレートは非常に大げさです。小人たちはバービー人形のような...

【ASO実践】磨く必要もお金をかける必要もない、AppStoreでリアルなレビューを増やす6つのコツ!

業界がいかにレビューはASO最適化には役に立たないと広めたとしても、実際には重み付けをする際に、Ap...

サイバーセキュリティを企業戦略の一部に組み込む

毎年、最新のセキュリティ製品に何十億ドルも費やし、最高のセキュリティ エンジニアやアナリストを雇用し...

データ分析から始めてウェディングフォトサイトのコンバージョン率を向上させる

私は重慶のウェディング写真ウェブサイトの SEO を 3 か月間行っており、「コンテンツが王様」であ...

Big BからSmall Bへ: あまり馴染みのないeコマースの供給とマーケティングシステムについて語る

公霄は文字通り供給と販売を意味します。この言葉は現在、電子商取引と結びついて、伝統的なブランドが電子...

nodeserv-$4.5/バックアップ/大容量メモリ/RDP/VP-N オールインワン

Nodeserv は今回、何か新しいものをもたらしました。少なくともプロモーション オプションは増え...

クラウドサービスは新しいインフラの「魂」となり、大手クラウドサービスプロバイダー間の競争が激化している。

「新インフラ」は1年以上ぶりに業界で再び話題となっている。画面上に溢れているだけでなく、いつでもどこ...