it-swarm-ja.tech

config.phpを効率的に含める方法は?

私は常により効率的な方法と新しいことを学ぶことに興味があります。現在、私はすべてのファイルでコード<?php include('config.php'); ?>を使用しています。ファイルがフォルダ構造のどこにあるかに応じて、<?php include('../config.php'); ?>または<?php include('../../config.php'); ?>があります。どうすればそれをより効率的にすることができますか?ルートにconfig.phpを設定し、ルート内のすべてにconfig.phpが必要になるようにする方法はありますか?

16
Strawberry

ファイルを自動的に含める方法があります(auto_prepend_file ini設定)ただし、実行できる最大の改善点は、複数のphpファイルの使用をやめ、index.phpをWebサイト全体の単一のエントリポイントとして使用することです。

「questions」、「tags」、「users」などのページでSO clone;)を記述したとします。各ページには、一般的なphpのもの(db、session)+ commonが必要です。 html要素(ヘッダー、フッター)。一般的なアプローチは、多数のphpファイル(questions.php、tags.php、users.php)を用意することです。各ファイルには、一般的なものが含まれています。たとえば、users.phpは次のようになります。

include 'db.php';
include 'session.php';
include 'html.header.php';
.....users-specific stuff 
include 'html.footer.php';

これは非常に面倒で(多くのコードを繰り返す必要があります)、柔軟性がありません(サイトのすべてのページにサイドバーを追加することを考えてください)。私の提案は、インクルードを「裏返し」にすることです。つまり、ページ固有のコードを含む「一般的なもの」ファイルを作成することです。

 # index.php
 db functions
 session functions
 html header

 $page = isset($_GET['page']) 
   ? preg_replace("/\W+/", "", $_GET['page'])
   : "home";
 include "$page.php";

 html footer

したがって、Webサイトに単一のエントリポイントがあります。これは、より柔軟で、デバッグに適しています。唯一の欠点は、URLの「ニース」が少ないことです(user.phpとindex.php?page = user)が、これはmod_rewriteで簡単に解決できます。

18
user187291

_config.php_を含むパスを php include path に入力すると、次のように簡単に実行できます。

_include 'config.php';
_

またはそれ以上:

_require_once 'config.php';
_

requireは、includeよりも優先されます。これは、何らかの理由(ファイルが見つからない、アクセス許可エラーなど)でファイルを含めることができない場合に、警告ではなくエラーがトリガーされるためです。 __once_サフィックスは、同じファイルが不必要に複数回含まれないようにするための優れた追加機能です。

また、include呼び出しでは、_'config.php'_を括弧で囲む必要がないことに注意してください。 includeはphpの関数ではありません。これは言語構造です。括弧は、次の例とは異なり、不要なグループ化として機能します:$myVar = (2 + 2);

17
Asaph

ベースディレクトリを一定にすることができます

define('BASE_DIR', realpath(__FILE__));

それをindex.phpに入れてください

その後、あなたはすることができます

include BASE_DIR . 'config.php';
8
alex

必要な(インクルード)ファイルを管理する方法は次のとおりです。

可能な場合は、必要なファイルで定数または変数(絶対パスを定義するため)を使用することはありません。これにはいくつかの利点があります。

  1. デプロイするWebサイトのバージョンごとに定数を変更する必要はありません。
  2. PHPLintのような静的分析ツールは、これらのタイプのインクルージョンでは機能しません。
  3. 私のエディター(Eclipse)では、必要なファイル名を制御してクリックすることで、必要なファイルに移動できます。
  4. プロジェクト間でファイルを共有する方が簡単です(必要なパスを編集する必要はありません)

しかし…これを行うには、すべてが相対的である必要があり、含まれる必要があります。デフォルトでは、PHPは、呼び出されたスクリプトの現在のディレクトリを使用して、インクルードパスを確立します。これにより、呼び出されたスクリプトが同じフォルダーにない場合に問題が発生する可能性があります。したがって、すべてのリクエストを渡すことをお勧めします。 1つのスクリプトで、このような問題を自動的に取り除きます。

2
cquezel

組み合わせることができるさまざまなオプション:

  • ソース管理で追跡されないリソースファイルにパス定義を作成します。例えばdefine( 'LIB_PATH'、 '/ home/tchalvak/project /');

  • 自動追加ファイルを指定し、php.iniで設定します。例えばその場で追加または削除できるスクリプトのグローバルな、どこでも使用できるリストが含まれます。

  • 最後に、私が見つけた、または思いついたパス文字列操作のトリックを少し忘れました。

    require_once(substr(__FILE__, 0, (strpos(__FILE__, 'lib/')))."resources.php"); //実際のパスに関係なく、定義を処理せずに、別の既知のファイルと特定の関係にあるファイルを必要とします。

2
Kzqai