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)

推薦する

キーワードランキングの最適化: K または降格されたウェブサイトを復活させる方法

月給5,000~50,000のこれらのプロジェクトはあなたの将来です百度検索が西遊アルゴリズムを導入...

検索フレンドリーなデザインの基本原則について語るシャリ・サロウ

5月25日、厦門でグローバル検索エンジン戦略会議が開催されました。Grantastic Design...

推奨: Buyvm $5/年/専用IP/cpanel仮想ホスト

buyvm は、cpanel パネル、純粋な SSD ハード ドライブ (RAID 付き)、無制限の...

ウェブサイトの診断と分析方法についての簡単な説明

みなさんこんにちは。私は湖南省出身のキネスです。今日は、主にウェブサイト戦略、ウェブサイトディレクト...

ブラインドボックス経済が「火を噴く」

現在、ショートビデオプラットフォームには、文房具ブラインドボックス、航空券ブラインドボックス、手作り...

リンク交換における6つの詐欺をチェック

友好的なリンクの交換は、多くのウェブマスターが毎日行っていることです。特に、初心者のウェブマスターの...

globalfrag-CN2 回線/$15/512M メモリ/25g SSD/500g トラフィック/ロサンゼルス

伝説のCN2ラインをご存知でしょうか? CN2 ポピュラーサイエンス。ここで globalfrag ...

中間レビュー: 2022 年に注目を集める Kubernetes スタートアップ 10 社

Kubernetes は、2014 年に Google が複数のクラスターとデバイス上で何千ものジョ...

フレンドリーなリンクを素早く見つけるための3つのヒント

ウェブマスターとして、フレンドリーリンクの重要性を多かれ少なかれ理解しているでしょう。フレンドリーリ...

デザインの両端をつなぐ:中国のFabスタイルのフラッシュセールデザイン

アメリカの電子商取引の先駆者であるFab.comに倣い、デザインやクリエイティブ製品のフラッシュセー...

インタラクティブ性を高めてユーザーをウェブサイトに釘付けにする

ウェブサイトのインタラクティブ性を高める方法は、2012 年に電子商取引企業の間で最もホットな話題の...

Anjukeは違法広告の疑いでアクセス不能となり、一時的に閉鎖されている

アンジュケはアクセスできません【捜狐ITニュース】9月26日、中古住宅サイト「安居客」が昨日からアク...

豆板の商業的救済:「製品」同盟

Douban は成功した製品であると同時に、失敗した製品でもあります。 Douban がユーザー エ...

サロン「テクノロジーが教育を牽引、AIが未来をつなぐ」のポイントを7分で理解

[51CTO.com からのオリジナル記事] インターネットや情報技術の発展に伴い、人々が知識を獲得...