インクルードファイルに問題があります。 require_once( 'somefile.php')を使用するときにURLを作成する方法を理解できないようです。ディレクトリ構造が異なる複数の場所でインクルードファイルを使用しようとすると、インクルードファイルが見つからないというエラーが表示されます。
Asp.netで、アプリケーションのルートパスを取得するには、〜/ directory/file.aspxを使用できます。チルダフォワードスラッシュは、自分のWebサイトのルートから参照していることを常に認識しており、Webサイト内のどこからリクエストが来てもファイルを見つけます。常にルートを参照し、そこからファイルを探します。
QUESTION:サイトのルートパスを取得するにはどうすればよいですか?サイト内のどこからでもインクルードファイルを再利用できるようにするにはどうすればよいですか? URLに絶対パスを使用する必要がありますか?
ありがとうございました!
有る $_SERVER['DOCUMENT_ROOT']
Webサーバーへのルートパスが必要です。
編集:ほとんどの主要なPHPプログラムを見る場合。インストーラーを使用する場合、通常、アプリケーションフォルダーへのフルパスを入力します。インストーラーは、それをアプリケーション全体に含まれる構成ファイルに入れるだけです。 1つのオプションは、 auto prepend file を使用して変数を設定することです。別のオプションは、 include_once() 必要なすべてのページの設定ファイルだけです。 bootstrapping を使用してアプリケーションを作成することをお勧めします。これは、1つのファイル(通常はurl_rewriteを使用)ですべての要求を集中させる場所です。これにより、構成変数を1か所で簡単に設定/インクルードし、すべてのスクリプトで使用可能にすることができます。
私は通常_config.php
_ファイルをROOTディレクトリに保存し、_config.php
_に保存します:
define('ROOT_DIR', __DIR__);
そして、他のすべてのスクリプトでROOT_DIR constantを使用します。 _$_SERVER['DOCUMENT_ROOT']
_を使用することは、次の理由であまり良くありません。
すべてのスクリプトの先頭で同じコードを使用でき、サブディレクトリにいる場合でもページが適切に読み込まれることを知っていると便利です。私はこれを使用します。これは、ルートディレクトリの名前を知っている必要があります(通常、「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";
ファイルを見つけるには、組み込みのマジック定数を使用する必要があります。 ___FILE__
_および___DIR__
_。 PHP <5.3を使用している場合は、dirname(__FILE__)
を使用する必要があります
例えば。
_require_once __DIR__.'/../../include_me.php';
_
_$_SERVER['DOCUMENT_ROOT']
_は、常に期待どおりの結果を返すとは限りません。