28

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

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

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

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

4

7 に答える 7

24

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

編集:あなたがほとんどの主要なphpプログラムを見れば。インストーラーを使用する場合、通常、アプリケーションフォルダーへのフルパスを入力します。インストーラーは、それをアプリケーション全体に含まれている構成ファイルに入れるだけです。1つのオプションは、自動追加ファイルを使用して変数を設定することです。もう1つのオプションは、必要なすべてのページに構成ファイルをinclude_once()することです。私が提案する最後のオプションは、ブートストラップを使用してアプリケーションを作成することです。これは、すべての要求を1つのファイル(通常はurl_rewriteを使用)に集中させる場所です。これにより、構成変数を1つの場所で簡単に設定/組み込み、すべてのスクリプトで使用できるようになります。

于 2010-10-17T08:51:26.860 に答える
12

私は通常、config.phpファイルをROOTディレクトリに保存し、次のconfig.phpように記述します。

define('ROOT_DIR', __DIR__);

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

  • 常にROOT_DIRと一致するとは限りません
  • この変数はCGIモードでは使用できません(たとえば、CRONでスクリプトを実行する場合)
于 2010-10-18T16:41:34.937 に答える
1

すべてのスクリプトの先頭で同じコードを使用でき、サブディレクトリにいる場合でもページが正しく読み込まれることを知っていると便利です。私はこれを使用します。これは、ルートディレクトリが何と呼ばれるかを知っていることに依存しています(通常、「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";
于 2017-08-14T09:31:05.407 に答える
0

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

例えば

require_once __DIR__.'/../../include_me.php';

$_SERVER['DOCUMENT_ROOT']あなたが期待するものを返すことが常に保証されているわけではありません。

于 2010-10-17T11:25:02.643 に答える
-1

どこかの設定ファイルで定義してください。

すべてが単一のindex.phpを介してルーティングされるMVCスタイルを使用していると仮定すると、

realpath('.');

現在の作業ディレクトリ(つまり、index.phpがある場所)へのパスが表示されます

したがって、これを次のように定義できます

define('PROJECT_ROOT', realpath('.'));

MVCではなく、サブフォルダー内のファイルで機能する必要がある場合は、構成ファイルにハードコーディングするだけです。

define('PROJECT_ROOT', 'C:/wamp/www/mysite');

次に、あなたができることを含めるとき。

include PROJECT_ROOT . '/path/to/include.php';
于 2010-10-17T11:32:22.223 に答える
-1

.htaccess代わりに、ファイルにベースディレクトリを設定することもできます

SetEnv BASE_PATH C:/wamp/www/mysite/

次に、PHPでそれを参照できます$_SERVER['BASE_PATH']

于 2010-10-18T00:49:56.643 に答える
-3

これを試して:

$_SERVER['DOCUMENT_ROOT']
于 2010-10-17T08:51:47.530 に答える