0

私はこれについての答えをインターネットの端まで探しました、そして私はそれが不可能であるという論理的な結論に到達しようとしています。異なるディレクトリ/レベルに他の複数のファイルが依存しているファイルを含める場合、一体どのように相対ルートを使用することを意味しますか?

例として、これが私のサイトの簡略化されたツリーです。

 Main site (PHP reports the main root to be: /Users/Luke/Sites/)
 -> index.php
 -> directoryfolder - > secondaryindex.php

 -> templates -> header.php 
              -> navigation.php

つまり、Finderでindex.phpに移動すると、ディレクトリは/Users/Luke/Sites/SiteAlpha/index.phpと表示されます。

index.phpとdirectoryfolder/secondsaryindex.phpの両方にheader.phpが含まれ、header.phpにはnavigation.phpが含まれます。問題は、header.phpのnavigation.phpのインクルード位置に名前を付けても、1ページしか正しく表示できないことです。IE:

ROOT_PATHのインクルード位置で(header.phpを介して)navigation.phpが呼び出された場合、'/templates/navigation.php(ROOT_PATHはdirname(__DIR__)と等しい)はまったく表示されません。ただし、secondaryindex.phpでは機能します

逆もまた同様です。ROOT_PATHのインクルード位置を使用してindex.phpでnavigation.phpが(header.phpを介して)呼び出された場合、'/siteAlpha/templates/navigation.phpは実際に機能します。ただし、secondaryindex.phpでは機能しません。

TL; DR、header.phpは異なるディレクトリレベルの複数のページから呼び出されるため、navigation.phpへのインクルードは私の最初の例と2番目の例である必要があります。

$ _SERVER ['DOCUMENT_ROOT']、dirname(__DIR__) 、、__FILE__自分で定義したルート定数を使用してみましたが、まったく成功しませんでした。私は無数の記事やSOの質問を読んだり、読んだり、読んだりしました。それはうまくいきません。

誰かが私にそれを機能させるために何をする必要があるかについてELI5の説明を教えてもらえますか?

4

1 に答える 1

1

まず第一に、アプリケーションのエントリ ポイントは 1 つだけであるべきだと私は確信しています。特定のパラメーターが設定されている場合は、状況に合わせて index.php に secondayrindex.php を含めることができます。テンプレートの場合も同様です。navigation.php と header.php を含む単一のテンプレートを作成します。次に、単一のテンプレートのみを含める必要があります。または、 smartyのようなテンプレート エンジンを使用してください。

あなたのケースに戻ります。考えられる解決策がいくつかあります。

  • エントリ ポイント ファイルでアプリケーションのルート ディレクトリに定数を定義します (例: index.php - エントリ ポイントを 1 つだけ持つという私の考えが最も理にかなっています)。
    • index.php では、define('APP_ROOT', __DIR__)
    • secondaryindex.php では、define('APP_ROOT', dirname(__DIR__))
    • もちろん、index.php と secondaryindex.php を同時にインクルードしないことに注意する必要があります。
  • 相対パスのみを使用する
    • header.php に navigation.php を含めると、require('navigation.php')
    • index.php に header.php を含めると、require('templates' . DIRECTORY_SEPARATOR . 'header.php')
    • secondaryindex.php に header.php を含めると、次のようになります。require('..' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'header.php')

ところで:次のようにsthを行うことを考えてください:define('DS', DIRECTORY_SEPARATOR)-書くDIRECTORY_SEPARATORと気が狂います。

私は現在、エントリ ポイントでルート ディレクトリ定数を定義するとき、または必要なすべての定数を定義するエントリ ポイントに含まれるファイルを定義するときに、絶対パスのみを使用する段階にあります。

これが役立つことを願っています。

于 2013-02-20T11:10:47.013 に答える