TL;DRinclude
: PHP のコマンドに含まれるページで相対リンクを使用しようとする場合、このページの最後のコード サンプルに代わるものは何ですか?
include()
ドキュメントにリンクするファイルを作成しようとしていますが.css
、問題は、複数の (異なる) ディレクトリからこのファイルを含める必要があることです。私のディレクトリ構造は次のようになります。
www
├── (getpath.php)
│
├── css
│ └── style.css
├── php
│ └── header.php
└── content
├── index.php
└── posts
└── index.php
(私はheader.php
両方のindex.php
ファイルに含めています。header.php
は参照するファイルですstyle.css
(ブラウザが見つけられる必要があります)。例: を使用する../css/style.css
と、CSS は my に表示されますcontent/index.php
が、 my には表示されませんcontent/posts/index.php
。ブラウザが探しているためです) content/css/index.php
.)
Web サイトは、ドキュメント ルート自体ではなく、ドキュメント ルートのサブディレクトリに配置された場合にも機能するはずです。このため、/css/style.css
(サーバー ルートに対して) を使用して CSS スタイルシートにリンクすることはできません。
CSS ドキュメントの場所をブラウザに伝える最も簡単な方法は、おそらくドキュメント ルートからの相対パスを指定することだと思います(間違っていたら訂正してください!) 。私の Web サイトはドキュメント ルートのサブディレクトリconfig
にあると予想されるため (そして、ファイルを使用してサブディレクトリを保存することは避けたい)、Web サイトがあるサブディレクトリの相対パスを見つける必要があります。getpath.php
私のウェブサイトのルート ディレクトリ (ドキュメント ルートではない) で呼び出されるファイル。そのファイルには、次のように書きました。
<?php
define('PROJECT_SUBDIRECTORY', $_SERVER['PHP_SELF']);
?>
content/index.php
ただし、これにより、インクルード ファイル ( ) ではなく、ユーザーがブラウザーで要求した PHP ファイル (例 ) の相対ディレクトリが得られることに気付きましたgetpath.php
。PHP_SELF
に基づいていることも読んだことがありますREQUEST_URI
が、これは安全ではありません。私はここでこの解決策を見つけました:
define('PROJECT_DIR', preg_replace('/^' . preg_quote($_SERVER['DOCUMENT_ROOT'], '/') . '/', '', __DIR__));
それは完全にうまく機能しますが、これを行うための「より良い」方法があるかどうか疑問に思っています。そのための変数を見つけることができませんでした — 上記の解決策が本当にそれを行う唯一の方法ですか?
前のコード例を使用する必要がありますか、それともより良い方法がありますか?
ディレクトリ構造を変更する必要がありますか? 他の人はこの問題をどのように解決しますか?
編集: Web サーバーに複数の (完全に独立した) Web サイトがあり、それらはすべてドキュメント ルートのサブディレクトリ (、、... など/documentroot/project1/
)/documentroot/project2/
に
あり、Web サイトをサブディレクトリで動作させようとしています。もちろん、CSS を 経由/css/style.css
でブラウザーに送信することもできますが、Web サイトがサブディレクトリにある場合は機能しません。また、構成ファイルを使用して、ドキュメント ルートに対するプロジェクトの相対パスを指定することも避けたいと考えています。
別の編集:問題は、私のプロジェクトのすべてのphpファイルに、/documentroot/project1
PHPのinclude
機能を使用してナビゲーションバーが含まれていることです。ナビゲーション バーは として保存され、ナビゲーション バー/documentroot/project1/php/header.php
の css はとして保存され/documentroot/project1/css/style.css
ます。相対リンクを使用する場合 (ブラウザーに場所を伝えるためstyle.css
)、ブラウザーはパスがindex.php
ではなく相対パスheader.php
であると認識し、 と同じディレクトリで CSS を検索しますindex.php
。
問題: 異なるディレクトリに複数の index.php ファイルがあり、index.php
ファイルを含むすべてのディレクトリに CSS フォルダーをコピー & ペーストしたくありません。