PHP でドキュメントをインクルードしたり、パスの記述が必要なその他の PHP アクションを実行したりするときはいつでも、../../../../../document.html
. これは機能しますが、面倒です。場合によっては、パスが間違っているため、コードがページに表示され、デバッグが行われます。
これは明らかに、コマンドを使用してバイパスできますが、これも$SERVER_['DOCUMENT_ROOT']
また、管理しきれないほどの量のコードを必要とする場合があります (非常に多くのパスが存在する場合)。
HTML のように、サイト全体のすべての PHP パスをドキュメント ルート相対に単純に定義する方法はありますか (/document.html
ルート相対です)。
3 に答える
はい。ほとんどの経験豊富な開発者は、アプリケーションにとって重要なさまざまなパスの構成ファイルで定数を定義する傾向があります。したがって、Web サーバーのドキュメント ルートをアプリケーション ルートとして定義し、Web に公開したくないアプリケーション インクルード (クラスなど) を配置する Web サーバー ディレクトリの外側に別のパスを設定する場合は、おそらく次のようになります。ディレクトリ。
define('WEB_ROOT', $_SERVER['DOCUMENT_ROOT']);
define('INCLUDE_DIR', '/path/to/directory/');
その後、アプリケーションでこれらの定数を参照するだけです。
コードをリファクタリングしたり、あるサーバーから別のサーバーにコードを移動したりするときに問題が発生するため、相対パスを使用しないことをお勧めします。相対タイプのパスが必要な場合 (アプリの移植性など) は、 や などの PHP マジック定数を使用したほうがよい場合があり__FILE__
ます__DIR__
。
これについては、別の質問で詳細な回答があります。
PHPにおける相対ファイルパスの注意点について説明しています。そこに記載されているものを使用して、magic constants and server variables
相対パスの問題を解決してください。
私はそれをしていて、それらの問題を抱えていました。mod_rewrite
次に、サイトをURLに使用するように切り替えました。その後、すべての php ページを同じディレクトリに配置したので、ルートを見つけるためにディレクトリ構造を 4 倍上に移動する必要はありませんでした。サーバー上の次の場所にphpファイルを配置できます。
/var/www/index.php
そして、.htaccess ファイルで mod_rewrite を使用すると、次の場所にマップできます。
http://domain.com/really/long/path/structure/page.html
その構造に移行したとき、特にさまざまなディレクトリへの移動に関して、php 側で本当に役に立ちました。