web-dev-qa-db-ja.com

PHPアプリケーションルートを見つける方法?

インクルードファイルに問題があります。 require_once( 'somefile.php')を使用するときにURLを作成する方法を理解できないようです。ディレクトリ構造が異なる複数の場所でインクルードファイルを使用しようとすると、インクルードファイルが見つからないというエラーが表示されます。

Asp.netで、アプリケーションのルートパスを取得するには、〜/ directory/file.aspxを使用できます。チルダフォワードスラッシュは、自分のWebサイトのルートから参照していることを常に認識しており、Webサイト内のどこからリクエストが来てもファイルを見つけます。常にルートを参照し、そこからファイルを探します。

QUESTION:サイトのルートパスを取得するにはどうすればよいですか?サイト内のどこからでもインクルードファイルを再利用できるようにするにはどうすればよいですか? URLに絶対パスを使用する必要がありますか?

ありがとうございました!

25
anon445699

有る $_SERVER['DOCUMENT_ROOT'] Webサーバーへのルートパスが必要です。

編集:ほとんどの主要なPHPプログラムを見る場合。インストーラーを使用する場合、通常、アプリケーションフォルダーへのフルパスを入力します。インストーラーは、それをアプリケーション全体に含まれる構成ファイルに入れるだけです。 1つのオプションは、 auto prepend file を使用して変数を設定することです。別のオプションは、 include_once() 必要なすべてのページの設定ファイルだけです。 bootstrapping を使用してアプリケーションを作成することをお勧めします。これは、1つのファイル(通常はurl_rewriteを使用)ですべての要求を集中させる場所です。これにより、構成変数を1か所で簡単に設定/インクルードし、すべてのスクリプトで使用可能にすることができます。

21
Jonathan Kuhn

私は通常_config.php_ファイルをROOTディレクトリに保存し、_config.php_に保存します:

define('ROOT_DIR', __DIR__);

そして、他のすべてのスクリプトでROOT_DIR constantを使用します。 _$_SERVER['DOCUMENT_ROOT']_を使用することは、次の理由であまり良くありません。

  • 常に一致するわけではありませんROOT_DIR
  • この変数は[〜#〜] cgi [〜#〜]モードでは使用できません(たとえば、CRONでスクリプトを実行する場合)
10
barbushin

すべてのスクリプトの先頭で同じコードを使用でき、サブディレクトリにいる場合でもページが適切に読み込まれることを知っていると便利です。私はこれを使用します。これは、ルートディレクトリの名前を知っている必要があります(通常、「htdocs」または「public_html」:

defined('SITEROOT') or define('SITEROOT', substr($_SERVER['DOCUMENT_ROOT'], 0, strrpos($_SERVER['DOCUMENT_ROOT'], 'public_html')) . 'public_html');

SITEROOTが一貫して定義されていると、スクリプトごとにパスを調整することなく、構成ファイルやページコンポーネントにアクセスできます。ルートフォルダの外部に保存されている設定ファイルに:

require_once SITEROOT . "/../config.php";
0
Geoff Kendall

ファイルを見つけるには、組み込みのマジック定数を使用する必要があります。 ___FILE___および___DIR___。 PHP <5.3を使用している場合は、dirname(__FILE__)を使用する必要があります

例えば。

_require_once __DIR__.'/../../include_me.php';
_

_$_SERVER['DOCUMENT_ROOT']_は、常に期待どおりの結果を返すとは限りません。

0
Petah