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)

推薦する

Kubernetes 上の Spark を簡単に

オープンソース版のデータメカニズムの改善Kubernetes 上の Spark の概要を知りたい場合...

2012 年のオンライン イベント マーケティング プランニングの代表的な 5 つの事例のレビュー

2012年は、終末の予言を超えて新たな生命をもたらす、特別な年になるはずでした。 2012 年は多く...

SAP Concur: 中国におけるスマート経費管理の導入を4つの側面から総合的に推進

[51CTO.comより引用] グローバル化時代の到来とともに、熾烈な競争の中で企業が成功するには「...

edgenat: 春に 30% 割引、VPS は 112 元/四半期から、香港 CN2、韓国 CN2 (ネイティブ IP)、米国 Unicom AS4837

edgenat では、春のプロモーションを実施しています。四半期ごとの支払いの場合は 30% オフ、...

データ重力がクラウドコンピューティングの導入にどのように影響し、役立つか

データセンター内のデータは安全ですが、AWS などのクラウド コンピューティング プロバイダーはセキ...

中国聯通とテンセントの戦略的協力の強化は実体経済のデジタル変革に貢献する

12月20日、中国聯通とテンセントは「2022年中国聯通パートナー会議」で新たな戦略協力協定に署名し...

消費者がすぐに注文できるようにするためのマーケティング戦略をいくつか共有する

従来の考え方では、ユーザーがサイトの製品ページに長く滞在すればするほど、コンバージョン率が高くなると...

Forrester 機械学習レポート: Tencent Cloud が第 1 位に

国際的に権威のある分析機関であるForresterが「Now Tech:中国における予測分析と機械学...

企業がWeibo活動を計画する際に注意すべきことは何ですか?

企業が公式Weiboアカウントを開設し、マーケティング宣伝を行うことは、非常に重要なマーケティングプ...

ウェブマスターネットワークからの毎日のレポート:盗作とバンドルは中国のインターネットに深刻な損害をもたらす

1. 周洪一:盗作とバンドルは中国のインターネットに深刻なダメージを与えた4月16日午後、360カン...

618年の最初の戦いで、JD.com + PinduoduoがTaobaoより小さいのはなぜですか?

現在、あらゆる面からのデータから判断すると、618カーニバルの人気はタオバオに集中している。では、こ...

imidc: 直接接続帯域幅、香港 VPS は年間 49 ドルから (20~80M 帯域幅)、香港専用サーバー (30M 帯域幅) は月額 59 ドルから

imidc は、香港データセンターの香港 VPS と香港独立サーバーの帯域幅をアップグレードした後、...

百度の外部リンク反撃の真相と思惑

5月にウェブサイト間で最も話題になったのは、Baiduによるウェブサイトの外部リンクに対する反撃だろ...

zgovps 日本大阪 EPYC パフォーマンス VPS シリーズのレビュー

zgovpsは、日本の大阪で高性能でソフトバンク回線を備えた日本のVPSを提供しています。Hostc...

推奨: vps.us-5 USD/Xen/1g RAM/10g HDD/50m 無制限/無料ドメイン名

vps.us は 11 か月間 Hostcat に登場していません。今回はすべての VPS に適用さ...