14

たとえば、これは良い考えですか?

require_once($_SERVER['DOCUMENT_ROOT'].'/include.php');

同じサーバー上に2つの仮想ホスト(1つはライブ用、もう1つは開発用)があり、Apache DocumentRootが異なる場合、インクルードのソースが不明で、任意のディレクトリにある可能性がある場合に、絶対パスをインクルードする必要がなくなります。

(注:次のセクションのファイルパスはWebルートを基準にしています。実際には、は次のようになります。/var/www/app/core/init.phpここ/var/www/appで、はWebルートです)

たとえば、/ core / init.phpがあります。これは、Webサイト全体の場所からの相対パスを使用して呼び出されます(/file.php/dir/file.php or /dir/dir/file.php)。

このinit.phpには、fundディレクトリの/core(のように/core/func/userfunctions.php)のサブディレクトリにいくつかの関数ページが含まれています。

したがって、init.phpでは$_SERVER、相対パスを使用して。のようなページから関数を呼び出そうとすると壊れてしまうため、このメソッドを使用できます/dir/file.php

問題はありませんが、一般的に何がうまくいかないのでしょうか。

4

3 に答える 3

10

$_SERVER['DOCUMENT_ROOT']設定されていない、または期待どおりでない(つまり、CLIまたは古いIISで設定されていない、または特定のCGIセットアップで無効である)場合があります。

そのためdirname(__FILE__)、その行が呼び出されたスクリプトのパスを取得するために使用できます。その後、そこから相対パスを参照できます。

include dirname(__FILE__) . '/../../other/file.php';

ファイルのディレクトリ構造がわかっていて、変更される可能性がない場合は、上記の方法を使用します。

利用できない場合DOCUMENT_ROOTは、以下が適切な代替品です。

substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));
于 2012-08-10T00:52:11.997 に答える
2

これを行う必要はありません。PHPは、デフォルトでドキュメントルートに含まれるファイルを検索します。

set_include_path($ new_include_path)を使用してこの動作を変更するか、php構成ファイルのinclude_pathを編集でき ます。

また、 http: //php.net/manual/en/reserved.variables.server.phpから:

'DOCUMENT_ROOT'サーバーの構成ファイルで定義されている、現在のスクリプトが実行されているドキュメントルートディレクトリ。

于 2012-08-10T00:25:38.060 に答える
0

たとえば、URL書き換えを使用する場合、/there/are/so/many/paths/in/the/url/of/this/ページのインクルードがまだ機能していることがわかったら、非常に満足します。

于 2012-08-10T00:30:06.830 に答える