2016-07-17 7 views
1

を使用し、ファイルツリー

/[PROJECT_ROOT]/include-caller-1.php 
/[PROJECT_ROOT]/subfolder/yet-another-include-caller-2.php 
/[PROJECT_ROOT]/subfolder/subfolder2/yet-another-include-caller-3.php 
/[PROJECT_ROOT]/subfolder/page-get-included.php 
/[PROJECT_ROOT]/subfolder/jump-to-this-page.php 

があると3「を含む、caller.php」「ページ-GET-が含まれていますinclude.php 'を適切な' include '文で置き換えます。

/include-caller-1.php

include("/subfolder/page-get-included.php"); 

/subfolder/yet-another-include-caller-2.php

include("page-get-included.php"); 

/サブフォルダ/ subfolder2 /未別-含みます-caller-3.php /subfolder/page-get-included.phpでは、それがリダイレクトを行います

include("../page-get-included.php"); 

に 'ジャンプ・ツー・この-page.php' のようなもので:

ただし、期待どおりに動作しません。

さらに、と比べて、[PROJECT_ROOT]の相対的な位置は柔軟です。 htdocs/project/,htdocs/など

つまり、$_SERVER['DOCUMENT_ROOT']もcaller.phpの場所も予測できません。一つのことが真実です: 'page-get-included.php'と 'jump-to-this-page.php'はちょうど隣り合っています。

この場合、可能なすべての発信者ファイルから 'jump-to-this-page.php'にリダイレクトする方法を教えてください。

+1

'__FILE__'には、ファイルシステムのパスが含まれています。このパスは、そのパスに公開されていないため、ヘッダーの場所では送信しません。 '$ _SERVER ['SCRIPT_NAME']' –

答えて

2

あなたには、ファイルシステムのパスや公共HTTPパスの違いを見つけることによって、関係なく、ドキュメントルートまたは別名で、(このケースではないプロジェクトルート)ファイルを含めるへのHTTPパスを確立することができますpage-get-included.php

$path_real = __DIR__; 
$path_real_difference = str_replace($path_real, '', $_SERVER['SCRIPT_FILENAME']); 
$path_web = str_replace($path_real_difference, '', $_SERVER['SCRIPT_NAME']); 

これで、どこに含まれていたかにかかわらず、このパスをjump-to-this-page.phpに参照できます。

header("Location: $path_web/jump-to-this-page.php"); 
+0

あなたの解決策に感謝します。私はあなたの考えに基づいて動作させる。 '$ debug_page_dir = __DIR __;' '$ host = $ _SERVER ['HTTP_HOST'];' '$ relative_dir = explode(" htdocs "、$ debug_page_dir、2)[1];' '$ url =" http: // " $ホスト。 $ relative_dir。 $ pageName; ' –

関連する問題