1

header.phpそこで、、、、などのインクルード ファイルnav.phpをフォルダーにセットアップしfooter.phpました。/inc

次に、ファイルをページに含めます。しかし、別のフォルダーがある場合、たとえばwiki、それらのファイルを wiki のページに含めたい場合、インクルードのファイル パスが壊れます。

例:wikiディレクトリのページにこれを含めました。

<?php include_once('../inc/header.php'); ?>

header.php ファイルには他に 2 つのインクルードがありますが、それらを別のディレクトリに../インクルードしているため、インクルード パスに a を追加しない限り、両方のインクルードが壊れます。

別のディレクトリ内にファイルを含め、戻ってパスを修正する必要がない最善の方法は何ですか?

4

8 に答える 8

3

realpath初期ファイルを使用して定数を作成し、読みやすく管理しやすい絶対パスを使用してそれらを参照します。

ここで例を見ることができます:

PHP から自分の URL の「アプリケーション ルート」を取得するにはどうすればよいですか?

また、定義する前に定数定義をテストすることをお勧めします。

于 2012-10-06T22:50:50.547 に答える
1

最も簡単な解決策は?絶対パスを使用してください。

于 2012-10-06T22:48:56.883 に答える
1

ファイルが同じレベルのディレクトリにある場合、相対パス (../ を含む) は同じになります。別の中にある場合は、サブディレクトリ内の先頭に ../ を付ける必要があります。パスを変更する唯一の方法は、メイン ディレクトリを表すサブディレクトリとしてリンクを作成することですが、これは再帰プロセスに関連して危険な結果をもたらす可能性があります。

ところで、 include_once は、この操作が「オプション」であることを意味します。つまり、プログラムは引き続き実行されます。含まれているファイルが必要な場合は、require_once を使用してください。そこにない場合、プログラムは壊れます。

于 2012-10-06T22:59:50.550 に答える
0

PHPのネイティブset_include_pathを使用してインクルードフォルダーを追加すると、名前だけでファイルをインクルードできます。

<?php
/**
 * The path to your /inc/ folder.
 */
$path = '/absolute/path/to/inc/';

/**
 * get_include_path retrieve's the current include path. 
 * It's a bad idea to over write the entire include path
 * The PATH_SEPARATOR constant is set per operating system
 */
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

/**
 * You can now include any files in /inc/ from any directory with no path
 */
include_once('header.php');
?>
于 2012-10-07T00:17:46.817 に答える
0

このように含めます

require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'inc'.DIRECTORY_SEPARATOR.'header.php');

これはうまくいくかもしれません!

于 2012-10-06T22:50:39.517 に答える
0

私はこの方法を使用するのが好きです:

define('ROOT_DIR', dirname(__FILE__) . '/'); // Defined on the index or in the bootstrap
include(ROOT_DIR . 'subfolder/fileName.php');
于 2012-10-06T22:55:02.230 に答える
0

$_SERVER['DOCUMENT_ROOT']DocumentRootApache などの Web サーバーの情報を提供します。次に、それを安定したデータムとして取得し、そこから変化しないようにマップできます。

include_once($_SERVER['DOCUMENT_ROOT'].'/inc/header.php');
于 2012-10-07T01:19:16.093 に答える